Android:如何获得此布局

时间:2013-09-05 20:08:02

标签: android android-layout

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

Can i do this without guessing the layout heights?

从我的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来做,但这只是拉伸它们的宽度而不是它们的高度。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:-1)

虽然图像不是完全正方形(虽然它非常不明显)我设法通过使用2个垂直LinearLayout而不是3个水平的图像并使用ScaleType=fitXY来填补剩余的间隙来解决这个问题离开我这个:

Final Layout

来自代码:

<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>