如何在RelativeLayout中均匀地分隔我的ImageViews

时间:2013-09-27 16:47:06

标签: android user-interface android-imageview relativelayout spacing

我有一个内置的Android应用程序,我在ImageView水平放置了3个LinearLayout,它们放置了android:layout_width="0dp"android:layout_weight="1",以便他们有布局中均匀分布。

现在我必须切换到使用RelativeLayout(因为我想重叠另一个图像而不能用LinearLayout重叠)所以我想从复制相同的效果开始让3 ImageView在父布局中均匀分布/缩放,但我不知道如何实现这一点。

我觉得我需要使用android:scaleType ...可能是中心作物:

  

均匀缩放图像(保持图像的纵横比),使图像的尺寸(宽度和高度)等于或大于视图的相应尺寸(减去填充)。

听起来不错,但我似乎无法让它正常工作...... 关于如何实现ImageViewRelativeLayout <RelativeLayout android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal" > <ImageView android:id="@+id/dragcircle" android:layout_width="wrap_content" android:tag="circle" android:layout_alignParentLeft="true" android:layout_height="wrap_content" android:adjustViewBounds="false" android:scaleType="centerCrop" android:src="@drawable/circle" /> <ImageView android:id="@+id/dragsquare" android:layout_width="wrap_content" android:tag="square" android:layout_height="wrap_content" android:layout_toRightOf="@id/dragcircle" android:adjustViewBounds="false" android:src="@drawable/square" /> <ImageView android:id="@+id/dragtriangle" android:layout_width="wrap_content" android:tag="triangle" android:layout_height="wrap_content" android:layout_toRightOf="@id/dragsquare" android:adjustViewBounds="false" android:src="@drawable/triangle" /> 之间传播的任何想法

现在的代码片段:

LinearLayout


注意:我在SO上找不到与此问题相同的约束问题。有很多问题,如:

Android: how evenly space components within RelativeLayout?android RelativeLayout, equal spacing?

但是如果你查看详细信息,你会发现他们是那些没有考虑ImageView作为等间距选项的人,而切换布局类型最终成为解决方案。我有,我正在使用它,但对我有用,因为我需要重叠图像:

注意这个例子,我有3个基本形状的ImageView,但我还有一个4 th RelativeLayout(它开始隐藏),它与中间的重叠。这就是我必须使用{{1}}

的原因

enter image description here

4 个答案:

答案 0 :(得分:2)

我想你会想回到原来的LinearLayout来满足你的所有需求。

如果您的第四张图片的大小必须与您现有的图片之一匹配,那么您要么创建一个资源,该资源是两个图片的组合,以便在需要重叠时替换或替换您的中心ImageView包含ImageView的RelativeLayout或FrameLayout。当您需要添加第四个图像时,将其添加到该布局。

类似的东西:

<LinearLayout
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:orientation="horizontal" >
   <ImageView
       android:id="@+id/dragcircle"
       android:layout_width="0dp"
       android:layout_weight="1"
       android:tag="circle"
       android:layout_height="wrap_content"
       android:scaleType="centerCrop"
       android:src="@drawable/circle" />
    <FrameLayout
       android:id="@+id/centerimagewrapper"
       android:layout_height="wrap_content"
       android:layout_width="0dp"
       android:layout_weight="1" >
       <ImageView
          android:id="@+id/dragsquare"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:tag="square"
          android:src="@drawable/square" />
       <ImageView
          android:id="@+id/arrow"
          android:layout_width="fill_parent"
          android:layout_height="wrap_content"
          android:src="@drawable/arrow"
          android:visibility="invisible" />
    </FrameLayout>
    <ImageView
       android:id="@+id/dragtriangle"
       android:layout_width="0dp"
       android:layout_weight="1"
       android:tag="triangle"
       android:layout_height="wrap_content"
       android:src="@drawable/triangle" />

答案 1 :(得分:1)

您可以隐藏要放在现有图像上的图标,并保留以前的LinearLayout来实现此目的。 LinearLayout的每个组件都是自定义布局(膨胀):

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
>
<ImageView
    android:id="@+id/img"
    android:layout_width="100dip"
    android:layout_height="100dip"
    android:layout_centerInParent="true"
    android:scaleType="fitXY"
    android:background="@android:color/transparent"
    android:src="img1_src"
/>

<ImageView
    android:id="@+id/imgOverlap"
    android:layout_width="50dip"
    android:layout_height="50dip"
    android:layout_centerInParent="true"
    android:scaleType="fitXY"
    android:adjustViewBounds="true"
    android:background="@android:color/transparent"
    android:src="img2_src"
    android:visibility="gone"
/>
</RelativeLayout>

似乎无法在RelativeLayout中使用“layout_weight”。 您还可以考虑使用GridView并设置其列数; GridView的每个项目都是上面的膨胀布局。

答案 2 :(得分:1)

您也可以以编程方式进行操作并告诉他们占屏幕宽度的33%。如果您想实现此目标,请查看DisplayMetrics以及每个ImageView的属性。

答案 3 :(得分:0)

试试这个

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/dragcircle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:scaleType="fitXY"
            android:src="@drawable/circle"
            android:tag="circle" />

        <ImageView
            android:id="@+id/dragtriangle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:src="@drawable/triangle"
            android:scaleType="fitXY"
            android:tag="triangle" />

        <ImageView
            android:id="@+id/dragsquare"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/dragtriangle"
            android:layout_toRightOf="@id/dragcircle"
            android:src="@drawable/square"
            android:scaleType="fitXY"
            android:tag="square" />

</RelativeLayout>