自定义网格有奇怪的比例

时间:2018-01-28 13:19:10

标签: android xml layout android-layout-weight

我创建了一个自定义网格,在特定情况下,必须具有2x2图像。 我的XML代码是:

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="2">

<LinearLayout
    android:layout_weight="1"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="0dp">

    <ImageView
        android:id="@+id/iv_immagine_sx1"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:src="@mipmap/cibo"
        android:scaleType="centerCrop"/>

    <ImageView
        android:id="@+id/iv_immagine_dx1"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:src="@mipmap/cibo"
        android:scaleType="centerCrop" />

</LinearLayout>

<LinearLayout
    android:layout_weight="1"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="0dp">

    <ImageView
        android:id="@+id/iv_immagine_sx2"
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:src="@mipmap/cibo"
        android:scaleType="centerCrop"/>

    <ImageView
        android:layout_weight="1"
        android:id="@+id/iv_immagine_dx2"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:src="@mipmap/cibo"
        android:scaleType="centerCrop" />

</LinearLayout></LinearLayout>

我想获得一个对称网格,每行的宽度/高度相同,每列的宽度/高度相同。

问题是在物理设备上运行代码我有这种情况,如下所示。

image on physical device

行的高度不一样......为什么? 我该如何解决这个问题?

感谢您的帮助。

编辑:

正如@Rashiq所建议,我将weight_sum添加到水平LinearLayouts,但尚未修复。

根据@S Praveen Kumar的建议,我尝试使用TabLayout代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="160dp"
android:gravity="center"
android:orientation="vertical" >


<TableLayout
    android:id="@+id/tableLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >


    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher"/>

        <ImageView
            android:id="@+id/ImageView2"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:src="@mipmap/ic_launcher"/>
    </TableRow>


    <TableRow
        android:id="@+id/tableRow2"
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_weight="1" >

        <ImageView
            android:id="@+id/ImageView3"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:src="@mipmap/cibo" />

        <ImageView
            android:id="@+id/ImageView4"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:src="@mipmap/cibo" />
    </TableRow>

</TableLayout>

但没有消息,问题仍然存在。

但是注意,我可以看到当图像源具有不同的尺寸时存在问题 ... 我该如何解决?

1 个答案:

答案 0 :(得分:0)

希望这可以解决您的问题:

首先找到父级布局的宽度

ViewTreeObserver observer = parentLayout.getViewTreeObserver();
    observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

        @Override
        public void onGlobalLayout() {
            // TODO Auto-generated method stub
            int width = parentLayout.getWidth();
            parentLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);

            //initiate your grid here

        }
    });

并将网格子布局的宽度和高度设置为获得的宽度,生成方形图像。