使用ImageViews进行Android Linear / RelativeLayout大小调整

时间:2010-08-30 15:33:47

标签: android imageview android-linearlayout

几天来一直困扰着这个问题,事情就是如何解决这个问题。我有一个大网格的ImageViews,它们都是相同的大小。它由一个水平线性阵列组成,其中包括5个垂直LinearLayouts(第一张图片)。

我想要什么(我不在乎,如果使用RelativeLayout,Linear或Tables),如果我将图像#2设置为更大的图像(特别是3x3的较小图像)我希望它有效地“覆盖”这些图像(如图2所示)。

我试过这样做是通过将'覆盖'图像(3,4,7,8,9,12,13,14)设置为setVisibility(GONE)工作正常然后第二个垂直LinearLayout扩展到适合我不想要的新图像的大小。如果我尝试将其设置为fill_parent,尽管它会压缩图像的大小。结果,我得到的是第三张照片。

所有关联的XML代码(id代码与图像上的代码匹配):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"> 
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs01"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs06"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs11"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs16"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
</LinearLayout>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs02"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs07"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs12"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs17"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
</LinearLayout>


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs03"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs08"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs13"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs18"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs04"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs09"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs14"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs19"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
</LinearLayout>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"> 
    <ImageView android:id="@+id/gs05"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs10"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs15"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
    <ImageView android:id="@+id/gs20"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
        />
</LinearLayout>

</LinearLayout>

如果我使用RelativeLayouts这样做,我在setVisibility(GONE)时会遇到问题,因为可能会使用缺少的视图引用该位置。将它设置为INVISIBLE只留下一个空白区域,当我真正想要的是它实际上是0px×0px时。

任何帮助都将受到赞赏;似乎无论我尝试什么东西总是稍微有点错误,它让我疯了。

alt text

2 个答案:

答案 0 :(得分:2)

嗯,当我回到家并尝试一些事情时,我会回到这里,但我建议尝试一个包含5行,5列的TableLayout。您应该能够在代码中设置行和列跨度(让视图占用多个单元格)。这就是我首先要尝试的。

This post看起来很有帮助。

答案 1 :(得分:2)

最后让它使用RelativeLayout和锚点工作。锚点设置为1x1网格方块的大小,然后在您想要的位置上有另一组图像视图AlignLeft和AlignTop,例如:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/relay"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal"> 

    <ImageView android:id="@+id/a_t1"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
        />
    <ImageView android:id="@+id/a_t2"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t1"
        />
    <ImageView android:id="@+id/a_t3"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t2"
        />
    <ImageView android:id="@+id/a_t4"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t3"
        />
    <ImageView android:id="@+id/a_t5"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t4"
        />


        <ImageView android:id="@+id/a_t6"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_below="@id/a_t1"
        />
    <ImageView android:id="@+id/a_t7"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t6"
android:layout_below="@id/a_t2"
        />
    <ImageView android:id="@+id/a_t8"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t7"
android:layout_below="@id/a_t3"
        />
    <ImageView android:id="@+id/a_t9"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t8"
android:layout_below="@id/a_t4"
        />
    <ImageView android:id="@+id/a_t10"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t9"
android:layout_below="@id/a_t5"
        />



        <ImageView android:id="@+id/a_t11"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_below="@id/a_t6"
        />
    <ImageView android:id="@+id/a_t12"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t11"
android:layout_below="@id/a_t7"
        />
    <ImageView android:id="@+id/a_t13"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t12"
android:layout_below="@id/a_t8"
        />
    <ImageView android:id="@+id/a_t14"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t13"
android:layout_below="@id/a_t9"
        />
    <ImageView android:id="@+id/a_t15"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t14"
android:layout_below="@id/a_t10"
        />



<ImageView android:id="@+id/a_t16"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_below="@id/a_t11"
        />
    <ImageView android:id="@+id/a_t17"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t16"
android:layout_below="@id/a_t12"
        />
    <ImageView android:id="@+id/a_t18"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t17"
android:layout_below="@id/a_t13"
        />
    <ImageView android:id="@+id/a_t19"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t18"
android:layout_below="@id/a_t14"
        />
    <ImageView android:id="@+id/a_t20"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_toRightOf="@id/a_t19"
android:layout_below="@id/a_t15"
        />

    <ImageView android:id="@+id/gs01"
        android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top|left"
android:layout_alignLeft="@id/a_t1"
android:layout_alignTop="@id/a_t1"
        />

</RelativeLayout>

因此,如果您想像我的例子那样在#2上添加一些内容,请将id gs01上的layout_alignLeft和layout_alignTop更改为@ id / a_t2,它将起作用。这解决了使用setVisibility(GONE)删除用于计算网格空间位置的“锚点”的问题。

现在这很复杂。 =(