2

我已经尝试过RelativeLayout 和LinearLayout,但没有弄清楚其中的任何一个。

我有许多视图(EditText)5-10,其中一些已启用,有些未启用。我想要的是让它们都显示出来。首先应该放在左上角,然后它们应该首先传播到右边,如果填满,然后在下一行。

有没有办法做到这一点,而无需自己编写整个布局?:-)

4

3 回答 3

2

你可以像这样 row.xml进行布局

<LinearLayout....>

    <EditText1....>
    <EditText2....>

</LinearLayout>
-------------------------------INFLATE ROW TO YOUR LAYOUT
LinearLayout featureLayout = (LinearLayout) View.inflate(BonusFilms.this, R.layout.row, null);

yourLayout.addView(featureLayout); // u can use this in for loop
于 2012-04-30T11:39:47.183 回答
2

您要查找的属性是 layout_weight,它将在 LinearLayout 中的 EditText 元素上设置。

布局权重告诉 UI 该容器中的元素应如何分配空间。更具体地说,它告诉 UI 每个元素有权使用多少空间。如果您曾经使用过 html,这就像为您的列指定百分比一样。

假设您有 2 个 EditText,并且您希望它们中的每一个都均匀地间隔线性布局,您可以这样做:

<LinearLayout...>
    <EditText
        android:layout_width="0dip"
        android:layout_weight="1">
    <EditText
        android:layout_width="0dip"
        android:layout_weight="1">
</Linearlayout>

注意:我不是 100% 确定为什么,但是您需要为要按权重分配的属性(在本例中为:宽度)指定 0dip。

在上述情况下,每个文本框都有权使用线性布局中可用空间的 50%。为什么?因为 LinearLayout 内所有元素的总权重为 2,每个文本框的权重为 1(参见下面的公式)

([allocation for current element] / [sum of all the weights]) * 100 = % of space allocated

(1 / 2) * 100 = 50%

如果您希望第一个文本框占 66%,第二个文本框占 33%,您可以这样做:

<LinearLayout...>
    <EditText
        android:layout_width="0dip"
        android:layout_weight="2">
    <EditText
        android:layout_width="0dip"
        android:layout_weight="1">
</Linearlayout>

这就是布局重量对您的帮助,但是,我不认为它有能力环绕有两个原因。1)文本框对它们的大小没有任何限制,那么它们如何知道何时达到限制并需要换行?您也许可以指定 minimumWidth 以强制它在某个点换行。

2)我不认为LinearLayout的包装。它们是无休止的一排。似乎您可能需要编写自己的自定义布局类,其中涉及对类中包含的内容以及可用的屏幕空间进行测量。

Android - LinearLayout Horizo​​ntal with wrapping children

于 2012-04-30T15:04:31.983 回答
1

虽然我得到了一些非常好的回答,但它并没有真正回答我的问题。除了编写我自己的繁重数学布局之外,最好的解决方案是: Sherif's answer

于 2012-05-01T07:33:10.363 回答