如果没有足够的空间,android按钮布局聪明两行

时间:2014-02-26 17:14:05

标签: android layout

我有5个按钮。我想把它放成一排或两排。我希望他们成为center_horizo​​ntal。我试过下面的代码:

 <LinearLayout
android:id="@+id/linear_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:gravity="center_horizontal"
android:orientation="horizontal" >

<Button android:id="@+id/btn_abc"  
        android:text="Speak"  
        android:layout_gravity="center_horizontal"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"
        />  
<Button android:id="@+id/btn_abc"  
        android:text="Speak"  
        android:layout_gravity="center_horizontal"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"
        />  
<Button android:id="@+id/btn_abc2"  
        android:text="Speak"  
        android:layout_gravity="center_horizontal"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"
        />  
     .....x3                         
  </LinearLayout>

我希望上面的代码可以处理不同的屏幕尺寸。如果空间足够,请使用1行。如果空间不足,请使用2行。 但是,在真正的4英寸手机设备中,当宽度不够时,它仍然只使用1排,为什么?谢谢

2 个答案:

答案 0 :(得分:2)

Google现在提供 Flex布局 https://github.com/google/flexbox-layout

1)添加到您的项目

  

依赖{       编译'com.google.android:flexbox:0.2.3'}

2)在布局中使用

<com.google.android.flexbox.FlexboxLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:flexWrap="wrap"
    app:alignItems="stretch"
    app:alignContent="stretch" >

    <TextView
        android:id="@+id/textview1"
        android:layout_width="120dp"
        android:layout_height="80dp"
        app:layout_flexBasisPercent="50%"
        />

    <TextView
        android:id="@+id/textview2"
        android:layout_width="80dp"
        android:layout_height="80dp"
        app:layout_alignSelf="center"
        />

    <TextView
        android:id="@+id/textview3"
        android:layout_width="160dp"
        android:layout_height="80dp"
        app:layout_alignSelf="flex_end"
        />
</com.google.android.flexbox.FlexboxLayout>

3)玩这2个参数

  • flexDirection 方向子项目放在
  • flexWrap 将Flex容器包装为单行或多行

enter image description here

答案 1 :(得分:1)

https://github.com/ApmeM/android-flowlayout

下载并导入'android-flowlayout'项目。 右键单击项目'android-flowlayout'并选择“android” - &gt;点击“Is library”

在您的应用中,右键单击该项目并选择“android” - &gt;导入库,添加'android-flowlayout'项目。

然后只需将xml linearlayour替换为:

<org.apmem.tools.layouts.FlowLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"  
>

P.S。但它似乎不能成为中心水平。但仍然是一个很好的解决方案!