为什么布局不符合规定的重量?

时间:2012-12-07 09:34:28

标签: android android-layout layout android-linearlayout

假设我有一个 LinearLayout (宽度和高度match_parent) weightSum =“5”,然后是水平方式

我将 5 TableLayout (width& height wrap_content)与 layout_weight =“1”放在一起,因此每个TableLayout都是其父级的1/5。

但是,在每个 TableLayout 之后,我放了一个 TextView (宽度和高度wrap_content)并且每件事都出错了(从我的角度来看):

如果文本很长,则强制其父布局(在我们的情况下为TableLayout)消耗,因此TableLayout的1/5比例来自其LinearLayout即使我指定了TextView,s ellipsize =“end”,父也不再受到尊重。

在做了一些研究后,我发现设置 layout_width 更强比其他所有属性(如weightSum)更强。

在我的情况下,我设置了 TableLayout的width = wrap_content ,但也设置了 layout_weight =“1”,但因为它是wrap_content,它往往会在其内容之后消耗,而不是尊重重量。

任何人都可以给我一些解决方案,我的表格布局如何尊重重量?(因为我不希望我的布局不遵守子文本视图长度后的比例和消耗)。

谢谢你的好意。这是我的代码:

<!-- my code -->
< LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal"
            android:weightSum="5" >

            <!-- table 1 -->

            <TableLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:ellipsize="end" 
                    android:maxLines="1"
                    android:text="test1test2test3test4test5"
                    android:textSize="20dp"/>

               <TableLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">


                </TableLayout>
            </TableLayout>

            <!-- table 2 -->

            <TableLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:text="test"
                    android:textSize="20dp" />

                <TableLayout 
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                </TableLayout>
            </TableLayout>

            <!-- table 3 -->

            <TableLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1" >

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:text="test"
                    android:textSize="20dp" />

                <TableLayout 
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                </TableLayout>
            </TableLayout>

            <!-- table 4 -->

            <TableLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:text="test"
                    android:textSize="20dp" />

                <TableLayout 
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                </TableLayout>
            </TableLayout>

            <!-- table 5 -->

            <TableLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1" >

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:gravity="center_horizontal"
                    android:text="test"
                    android:textSize="20dp" />

                <TableLayout 
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">

                </TableLayout>
            </TableLayout>

        </LinearLayout>

4 个答案:

答案 0 :(得分:5)

使用android:layout_width =“0dp”而不是android:layout_width =“wrap_content”用于外部TableLayouts。

同时指定android:layout_weight =“1”。

删除android:weightSum =“5”以自动调整大小。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal" >

  <!-- table 1 -->

  <TableLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ellipsize="end"
        android:gravity="center_horizontal"
        android:text="test1 test2 test3 test4 test5"
        android:textSize="20dp" />

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </TableLayout>
  </TableLayout>

<!-- table 2 -->

  <TableLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="test"
        android:textSize="20dp" />

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </TableLayout>
  </TableLayout>

<!-- table 3 -->

  <TableLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="test"
        android:textSize="20dp" />

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </TableLayout>
  </TableLayout>

<!-- table 4 -->

  <TableLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="test"
        android:textSize="20dp" />

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </TableLayout>
 </TableLayout>

<!-- table 5 -->

  <TableLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:text="test"
        android:textSize="20dp" />

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </TableLayout>
  </TableLayout>

</LinearLayout>

为什么TableLayout里面有空? 如果你想看全文,那么设置android:ellipsize =“none”

答案 1 :(得分:3)

所有五个父表格布局的

android:layout_width= "0dp"代替“wrap_content"

答案 2 :(得分:0)

将所有Table布局的layout_height和layout_width设置为“fill_parent”。 你会完成的。

答案 3 :(得分:0)

您可以在一个表格布局中使用表格行,并使用weight_sum表格布局

       ` <TableLayout
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:weightSum="5"/>
            <TableRow 
                        your text 
             />
            <TableRow 
                        your text 
             />
        <TableRow 
                        your text 
             />
       <TableRow 
                        your text 
             />
       <TableRow 
                        your text 
             />
       </TableLayout>`