如何在安卓系统中将一个ImageView放置在另一个ImageView之上

24

这是我迄今为止尝试过的布局,但都没有成功。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/white">

 <LinearLayout 
    android:id="@+id/lltest" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_centerHorizontal="true">

        <ImageView 
        android:id="@+id/inside_imageview" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_marginTop="5dip"
        android:layout_marginBottom="5dip"
        android:src="@drawable/frame"/>

</LinearLayout>

 <ImageView 
        android:id="@+id/outside_imageview" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_alignTop="@id/inside_imageview"
        android:scaleType="fitXY"/>
</RelativeLayout>

我想要的是将外部图像视图放在内部图像视图之上,并具有完全相同的高度和宽度...如何通过布局来实现?


你尝试过除了alignTop之外,添加layout_alignLeft="@id/inside_imageview"吗? - CSmith
问题是他在LinearLayout内部有一个inside_imageView,因此属性layout_alignTop无法找到对inside_imageView的引用ID。如果ID引用为lltest,则outside_imageview将与LinearLayout对齐。 - DeeV
7个回答

45
    <RelativeLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:background="@color/white" >

    <ImageView
        android:id="@+id/inside_imageview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dip"
        android:layout_marginTop="5dip"
        android:src="@drawable/frame" />

      <ImageView
         android:id="@+id/outside_imageview"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignTop="@id/inside_imageview"
         android:layout_alignBottom="@id/inside_imageview"
         android:layout_alignLeft="@id/inside_imageview"
         android:layout_alignRight="@id/inside_imageview"            
         android:scaleType="fitXY" />
  </RelativeLayout>

RelativeLayout 中的 layout_align[Top|Bottom|Left|Right] 属性是基于视图在边距内的相应 x 和 y 值进行对齐。第二个 ImageView 现在将根据边距与第一个 ImageView 的顶部、底部、左侧和右侧对齐。对齐时会忽略 padding。


嗯...实际上我还有另外两个ImageView,除了inner_imageview之外...所以我想把它们放在一个单独的LinearLayout中...内部的我需要水平方向,而外部的我想要垂直方向...所以请给我建议。 - coderslay
那会使事情变得更加复杂。您无法引用其他视图中的子视图。它们只接受同级别子节点的引用。如果 inside_imageviewoutside_imageview 具有相同的宽度和高度,则只需将它们放在两个单独的 LinearLayouts 中,并通过顶部和左侧对齐两个 LinearLayouts。如果尺寸差异很大,则可能需要为其中一个使用 layout_below,而为另一个使用 layout_toRightOf - DeeV
太棒了!喜欢它! - uLYsseus

21

FrameLayout是你需要的。你可以简单地合并父布局,它也是一个FrameLayout。 看一下Android开发者博客: http://android-developers.blogspot.it/2009/03/android-layout-tricks-3-optimize-by.html

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center">

    <ImageView
        android:id="@+id/outside_imageview" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitXY"/>

    <ImageView
        android:id="@+id/inside_imageview" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:layout_marginTop="5dip"
        android:layout_marginBottom="5dip"
        android:src="@drawable/frame" />
</merge>

3
很遗憾,提问的那个人不理解也不愿意了解框架布局能做什么,还给我们所有人点了踩。我为你俩点了赞 :) - con_9
这甚至可以将视图层次结构降低一个级别 :woot: - Dheeraj Bhaskar
不错的解决方案。FrameLayout 绝对是正确的选择。 - nurnachman
@Francesco Vadicamo,能否请教一下,我遇到了渲染问题。出现了一个异常,提示<merge>必须是根元素。我不需要所有元素都重叠在一起,只需要这两个图像嵌套即可。目前,根元素是一个垂直LinearLayout,我希望保持子元素的排序。我该怎么办? - iOSAndroidWindowsMobileAppsDev
@Francesco Vadicamo 我尝试使用合并作为根元素并将其包含在 (show_in activity_main) 中,但是布局没有被包含。 - iOSAndroidWindowsMobileAppsDev
@JqueryNinja <merge> 用于当你需要一个 FrameLayout 时,你想要重用 Android 自动放置在层次结构顶部的根 FrameLayout;如果你需要一个 LinearLayout,只需将其添加为布局的根元素,不需要使用 <merge> - Francesco Vadicamo

6
您可以尝试使用FrameLayout。在FrameLayout中,每个子元素都会叠放在顶部。

在设备上只显示了1个图像,在布局的设计视图中正确地显示了2个图像,一个在另一个上方。 - iOSAndroidWindowsMobileAppsDev

3

我尝试了这种方法,对我有效,希望能帮到你

 <FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="5dip">
<ImageView
    android:id="@+id/image_first"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/imga"/>
<ImageView
    android:id="@+id/imageview"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/image"/>
</FrameLayout>

在设备上只显示了1张图片,而在布局的设计视图中,2张图片正确地叠放在一起显示。 - iOSAndroidWindowsMobileAppsDev
1
那么问题是什么? - Aditya Vyas-Lakhan

3

我只使用高程... 0=地面或地下室... 哈哈 1=第二层 10=第十层,最顶层

    <ImageView
          android:id="@+id/blog_user_image_gp"
          android:layout_width="match_parent"
          android:layout_height="200dp"
          android:layout_marginTop="70dp"
          android:src="@drawable/avatar"
          android:scaleType="fitXY"
          android:foregroundGravity="center"
          android:elevation="10dp"
          />
  <android.support.v7.widget.RecyclerView
        android:id="@+id/users_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="80dp"
        android:elevation="1dp"
        android:scrollbars="vertical" />

1
                <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:padding="@dimen/_15dp">
                <ImageView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:padding="@dimen/_10dp"
                    android:layout_marginTop="@dimen/_50dp"
                    android:background="@drawable/white_background"
                   />
                <ImageView
                    android:layout_width="@dimen/_100dp"
                    android:layout_height="@dimen/_100dp"
                    android:background="@drawable/my_credit"
                    android:layout_marginTop="@dimen/_5dp"
                    android:layout_centerHorizontal="true"
                    />
            </RelativeLayout>

它将一个ImageView放置在另一个ImageView的上方...没有必要使用任何FrameLayout。 - Sunil

-1
只需添加翻译z,它就会置顶,确保翻译z大于您想置顶的视图。对于迟来的回复,我很抱歉。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接