【问题标题】:Layout, adding views into a viewgroup, and having them shown on lines so no scroll is needed布局,将视图添加到视图组中,并将它们显示在行上,因此不需要滚动
【发布时间】:2012-04-30 11:31:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: android android-layout viewgroup


    【解决方案1】:

    你可以这样布局 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
    

    【讨论】:

    • 我不想要那个,我希望它可以缩放,所以如果它是 5 个小的,它们可以在一条线上,如果它的 2 个大的和 3 个小的,它们将在 2 行.. 等等 :-)
    • 是的,线性虽然是线性的。所以它只是将它们挤压到虚无中
    【解决方案2】:

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

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

    假设您有 2 个 EditText,并且您希望每个 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 Horizontal with wrapping children

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-17
        • 2012-09-17
        相关资源
        最近更新 更多