如何在Android中水平等距显示2行中的6个项目

时间:2013-10-22 15:48:02

标签: android android-layout

我正在为Android平板电脑编写目录应用,每页显示6个项目:每行3个项目。 每个项目由图像(200x300)和文本组成。 一切都在Eclipse中使用android xml布局编辑器进行设计似乎很好,因为我使用每个项目的默认图像和一个虚拟固定文本:每个项目在那里水平完全等距。

当我在平板电脑上运行时,每个项目都会被从文件系统中获取的图像覆盖(再次为200x300),文本(可变长度)将从数据库中获取。 在使用我的自定义数据填充6个元素后,问题就出现了问题,布局似乎不对,正如您在此屏幕截图中看到的那样:http://postimg.org/image/91mcv0z1f/

可能(但我不确定)问题是由长文本引起的。 是否有办法(如果问题是文本)强制布局保持固定? (或者使字体变小(或截断文字,我不在乎))

这是我正在使用的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RootView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/white"
android:gravity="center_horizontal|center_vertical"
android:orientation="vertical" >

<LinearLayout
    android:id="@+id/filaTop"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_margin="15dp"
    android:layout_weight="1"
    android:gravity="center"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/ivBottle1"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:src="@drawable/bottle_trans" />

        <TextView
            android:id="@+id/tvBottle1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top|center"
            android:text="vino"
            android:textAlignment="center"
            android:textSize="22sp" >
        </TextView>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/ivBottle2"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:src="@drawable/bottle_trans" />

        <TextView
            android:id="@+id/tvBottle2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top|center"
            android:text="vino"
            android:textAlignment="center"
            android:textSize="22sp" >
        </TextView>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/ivBottle3"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:src="@drawable/bottle_trans" />

        <TextView
            android:id="@+id/tvBottle3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top|center"
            android:text="vino"
            android:textAlignment="center"
            android:textSize="22sp" >
        </TextView>
    </LinearLayout>
</LinearLayout>

<LinearLayout
    android:id="@+id/filaBottom"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_margin="15dp"
    android:layout_weight="1"
    android:gravity="center"
    android:orientation="horizontal" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/ivBottle4"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:src="@drawable/bottle_trans" />

        <TextView
            android:id="@+id/tvBottle4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top|center"
            android:text="vino"
            android:textAlignment="center"
            android:textSize="22sp" >
        </TextView>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/ivBottle5"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:src="@drawable/bottle_trans" />

        <TextView
            android:id="@+id/tvBottle5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top|center"
            android:text="vino"
            android:textAlignment="center"
            android:textSize="22sp" >
        </TextView>
    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/ivBottle6"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:layout_weight="1"
            android:adjustViewBounds="true"
            android:src="@drawable/bottle_trans" />

        <TextView
            android:id="@+id/tvBottle6"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="top|center"
            android:text="vino"
            android:textAlignment="center"
            android:textSize="22sp" >
        </TextView>
    </LinearLayout>
</LinearLayout>

提前致谢。

编辑(求助):在每个线性布局中放置android:layout_width="0dip",解决了Dale Wilson建议的问题,如下所示:

    <LinearLayout
        android:layout_width="0dip"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

2 个答案:

答案 0 :(得分:1)

如果您有layout_weight,请在0px处启动视图。 layout_weight将它们全部增长到相同的大小。如果你说wrap_content然后他们从不同的大小开始,增长相同的数量,所以他们最终会有不同的大小。

答案 1 :(得分:0)

更新您的布局,如下所示

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
      android:id="@+id/RootView">


    <LinearLayout android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="match_parent"
            android:id="@+id/filaTop">
        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#ff00ff"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/ivBottle1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:layout_gravity="center"
                android:adjustViewBounds="true"
                android:background="@drawable/ic_launcher"
                android:src="@drawable/bottle_trans" />

            <TextView
                android:id="@+id/tvBottle1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:gravity="top|center"
                android:text="vino"
                android:textAlignment="center"
                android:textSize="22sp" >
            </TextView>
        </RelativeLayout>

        <RelativeLayout
             android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical" >

            <ImageView
                  android:layout_centerInParent="true"
                android:id="@+id/ivBottle2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                 android:background="@drawable/ic_launcher"
                android:layout_gravity="center"
                android:layout_weight="1"
                android:adjustViewBounds="true"
                android:src="@drawable/bottle_trans" />

            <TextView
                 android:layout_alignParentBottom="true"
                android:id="@+id/tvBottle2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="top|center"
                android:text="vino"
                android:textAlignment="center"
                android:textSize="22sp" >
            </TextView>
        </RelativeLayout>

        <RelativeLayout
             android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#0000ff"
            android:orientation="vertical" >

            <ImageView
                  android:layout_centerInParent="true"
                android:id="@+id/ivBottle3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                 android:background="@drawable/ic_launcher"
                android:layout_weight="1"
                android:adjustViewBounds="true"
                android:src="@drawable/bottle_trans" />

            <TextView
                 android:layout_alignParentBottom="true"
                android:id="@+id/tvBottle3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="top|center"
                android:text="vino"
                android:textAlignment="center"
                android:textSize="22sp" >
            </TextView>
        </RelativeLayout>

    </LinearLayout>

    <LinearLayout android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_width="match_parent"
          android:id="@+id/filaBottom">


         <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#ff00ff"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/ivBottle4"
            android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:layout_gravity="center"
                android:adjustViewBounds="true"
                android:background="@drawable/ic_launcher"
                android:src="@drawable/bottle_trans" />

            <TextView
                android:id="@+id/tvBottle4"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:gravity="top|center"
                android:text="vino"
                android:textAlignment="center"
                android:textSize="22sp" >
            </TextView>
        </RelativeLayout>

        <RelativeLayout
             android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:orientation="vertical" >

            <ImageView
                  android:layout_centerInParent="true"
                android:id="@+id/ivBottle5"
                 android:layout_width="wrap_content"
                  android:background="@drawable/ic_launcher"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="1"
                android:adjustViewBounds="true"
                android:src="@drawable/bottle_trans" />

            <TextView
                 android:layout_alignParentBottom="true"
                android:id="@+id/tvBottle5"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="top|center"
                android:text="vino"
                android:textAlignment="center"
                android:textSize="22sp" >
            </TextView>
        </RelativeLayout>

        <RelativeLayout
             android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="#0000ff"
            android:orientation="vertical" >

            <ImageView
                  android:layout_centerInParent="true"
                android:id="@+id/ivBottle6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                 android:background="@drawable/ic_launcher"
                android:layout_weight="1"
                android:adjustViewBounds="true"
                android:src="@drawable/bottle_trans" />

            <TextView
                 android:layout_alignParentBottom="true"
                android:id="@+id/tvBottle6"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="top|center"
                android:text="vino"
                android:textAlignment="center"
                android:textSize="22sp" >
            </TextView>
        </RelativeLayout>

    </LinearLayout>


</LinearLayout>

同时删除不必要的代码行。