为什么不同的layout_weights在表格布局中不起作用?

时间:2014-08-10 19:03:43

标签: android android-layout android-tablelayout

我在TableLayout上使用layout_weight时遇到问题。当所有行的layout_weight为1:

时,一切正常

Working layout

结果可接受但不完美。所以我尝试添加layout_weight以使第一行稍微小一些,最后四行稍微大一些。但结果更令人惊讶:

first try with layout_weight

这是错误的疼痛。我还试图让第一行变小,然后保持原样。这也是一个古怪的结果:

second try with layout_weight

任何可以触发这种错误行为的想法?任何抬头?需要注意的任何众所周知的问题?

源代码:

XML Sources相当复杂,包含了纵向和横向,所以我更喜欢链接存储库:

工作版本:

最后,不仅仅是旧版工作版的图片。 android:layout_weight其中:2,3,3,3,3,3,5,5,5,5

working version

是的,我现在,从不接触工作代码。但我有内存问题( android.widget.LinearLayoutandroid.widget.RelativeLayout是真正的内存生成)并将一些布局更改为android.view.ViewGroups。请注意,按钮是特殊的,因为它们具有较大的点击区域,以便在尺寸较小的情况下更容易击中它们。

1 个答案:

答案 0 :(得分:0)

感谢@Frank N. Stein我在android:layout_weight内部获得了一些新内容,我想与您分享

1)它是一个浮点数,总和达到100%

您在互联网上找到的大部分样本都会将android:layout_weight显示为整数。但真的android.widget.LinearLayout.LayoutParams.weight是一个浮动。

然而,裸浮点数是XML解析器的表现,它们使用起来有点棘手。首先,他们没有自己的XML标记,因此您必须使用通用的<item>标记:

<resources>
  <item name='Row_Weight_0' type='fraction'>7.0</item>
  <item name='Row_Weight_1' type='fraction'>9.0</item>
  <item name='Row_Weight_2' type='fraction'>12.0</item>
</resources> 

然后它们不是float而是fractions,后来必须是这样的引用:

  <LinearLayout
    android:layout_weight="@fraction/Row_Weight_2"
    style='@style/Row'
  >

因此,您可能仍希望使用整数来实现更简单的语法。但请记住,他们将缩放到%。例如,如果您将android:layout_weight设置为{1,1,2},它们将转换为{25%,25%,50%}。

我使用了{2,3,3,3,3,3,5,5,5,5}的android:layout_weight,其中android:layout_weightSum 37 。素数。不是一个好的开始,一定会给你四舍五入的问题。 @Frank N. Stein建议您选择android:layout_weight,以便android:layout_weightSum成为100%的。即10,100或1000。

2)我使用了表格布局

有人可能会认为表格布局非常适合按钮的行和列。事实证明我错了。看下面的图片。一个使用android.widget.TableLayoutandroid.widget.TableRow另一个普通的android.widget.LinearLayout。没有其他改变。只需%s /TableRow/LinearLayout/g%s /TableLayout/LinearLayout/g

TableLayout with TableRow Linear Layout with Linear Layout

这是一个显着的差异。第一次是灾难,第二次正是我想要的。所以答案是我的问题是:

当行需要缩小以适应屏幕时,android.widget.TableRow出现问题!请改用android.widget.LinearLayout