0

有没有办法在不猜测每个水平 LinearLayout 的高度的情况下让图像像这张图片一样触摸?

我可以在不猜测布局高度的情况下做到这一点吗?

正如您从我的 XML 中看到的那样,我不得不猜测 144dp 的 LinearLayout 高度才能获得这种效果,有没有更好的方法可以在不同的屏幕尺寸上工作?

<LinearLayout
        android:id="@+id/LinearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/LinearLayout01"
            android:layout_width="match_parent"
            android:layout_height="144dp" >

            <ImageView
                android:id="@+id/ImageView01"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_sport" />

            <ImageView
                android:id="@+id/ImageView02"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_science" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/LinearLayout02"
            android:layout_width="match_parent"
            android:layout_height="144dp"
            android:layout_gravity="fill_horizontal" >

            <ImageView
                android:id="@+id/imageView03"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_science" />

            <ImageView
                android:id="@+id/imageView04"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_sport" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/LinearLayout03"
            android:layout_width="match_parent"
            android:layout_height="144dp"
            android:layout_gravity="fill_horizontal" >

            <ImageView
                android:id="@+id/ImageView05"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_sport" />

            <ImageView
                android:id="@+id/ImageView06"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:src="@drawable/ic_science" />
        </LinearLayout>
    </LinearLayout>

如果可能的话,我希望能够在 XML 中做到这一点。图像是正方形的,因此它们必须填充宽度并且仍然成比例。我几乎可以用 fitXY 做到这一点,但这只会拉伸它们的宽度而不是它们的高度。

4

2 回答 2

2

您应该使用 GridView 而不是许多 LinearLayouts。

如果你想保留你的代码,更新这个:

你的主布局应该有这个属性:

android:layout_height="match_parent"

其他“布局包装器”应该有:

android:layout_height="wrap_content"
android:orientation="horizontal"

你的 imageView 应该有:

android:layout_height="wrap_content"

您只使用方形图像吗?

我更新了您的代码并没有尝试,但它应该可以工作:

<LinearLayout
        android:id="@+id/LinearLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/LinearLayout01"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/ImageView01"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:src="@drawable/ic_sport" />

            <ImageView
                android:id="@+id/ImageView02"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:src="@drawable/ic_science" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/LinearLayout02"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <ImageView
                android:id="@+id/imageView03"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:src="@drawable/ic_science" />

            <ImageView
                android:id="@+id/imageView04"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:src="@drawable/ic_sport" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/LinearLayout03"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="fill_horizontal"
            android:orientation="horizontal" >

            <ImageView
                android:id="@+id/ImageView05"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:src="@drawable/ic_sport" />

            <ImageView
                android:id="@+id/ImageView06"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:src="@drawable/ic_science" />
        </LinearLayout>
    </LinearLayout>
于 2013-09-05T20:48:46.847 回答
-1

虽然图像不是完全正方形(尽管它很不明显),但我设法通过使用 2 个 Vertical LinearLayouts 而不是 3 个 Horizo​​ntal 来解决这个问题,并使用ScaleType=fitXY它来填补剩余的空白,给我留下了这个:

最终布局

从代码:

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

    <LinearLayout
        android:id="@+id/LinearLayout01"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical"
        android:weightSum="3" >

        <ImageView
            android:id="@+id/ImageView03"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/ic_science" />

        <ImageView
            android:id="@+id/ImageView01"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/ic_sport" />

        <ImageView
            android:id="@+id/ImageView02"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/ic_science" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/LinearLayout02"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical"
        android:weightSum="3" >

        <ImageView
            android:id="@+id/ImageView04"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/ic_sport" />

        <ImageView
            android:id="@+id/imageView03"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/ic_science" />

        <ImageView
            android:id="@+id/imageView04"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:scaleType="fitXY"
            android:src="@drawable/ic_sport" />

    </LinearLayout>

</LinearLayout>
于 2013-09-05T21:07:26.380 回答