几天来一直困扰着这个问题,事情就是如何解决这个问题。我有一个大网格的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时。
任何帮助都将受到赞赏;似乎无论我尝试什么东西总是稍微有点错误,它让我疯了。
答案 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)删除用于计算网格空间位置的“锚点”的问题。
现在这很复杂。 =(