Android Studio:如何让多个按钮在布局中自动流动?

时间:2016-12-28 00:12:58

标签: android-layout android-studio

我的应用程序有7个按钮,我想在屏幕上“自动对齐”,具体取决于屏幕尺寸。

所以在手机上,布局可能看起来像这样......

[button 1] [button 2] [button 3]
[a really long button number 4]
[button 5] [btn 6] [btn 7]

...但在平板电脑上,所有7个按钮都在一行上(或者最后两个按钮可能在下一行)。

[button 1] [button 2] [button 3] [a really long button number 4] [button 5] [btn 6] [btn 7]

我尝试过使用RelativeLayout,但无法让它发挥作用。 我可以使用3个LinearLayouts,只接受总会有3行按钮,但不是很优雅。

有没有办法达到这个效果? 我搜索了很多,但我发现的一切主要与按钮点击有关,这不是问题。 任何帮助表示赞赏! :)

修改

经过更多的研究,我同意Fragments总体上是最好的解决方案,所以我接受了这个答案。

然而,对于这个特定的应用程序,我决定使用Horizo​​ntalScrollView,它占用最少量的UI空间。以下是我的解决方案的标记......

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <!-- ### all 7 buttons here; only showing one for brevity -->
            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
        </LinearLayout>
    </HorizontalScrollView>

2 个答案:

答案 0 :(得分:1)

Fragments在这里很有用。

基本上,您可以为您希望它们绑定的特定屏幕密度定义特定片段(或“视图的一部分”)。

对于手机,您可以定义片段button_phone_fragment.xml

对于平板电脑,您可以定义片段button_tablet_fragment.xml

然后你会在你的代码中夸大布局:

inflater.inflate(R.layout.button_phone_fragment, container, false);

Here is关于在彼此之间替换片段的更多信息。

答案 1 :(得分:0)

你可能正在寻找一种叫做“网格布局”的东西。两个最重要的属性是“columnSpan”和“layout_row”

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/GridLayout1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:columnCount="3"
android:rowCount="3"
android:orientation="horizontal"
tools:context="com.inducesmile.gridlayouttutorial.MainActivity" >
<Space />

<Button
    android:id="@+id/button1"
    android:layout_gravity="left|top"
    android:text="@string/button_name" />

<Button
    android:id="@+id/button3"
    android:layout_gravity="left|top"
    android:text="@string/button_name" />

<Button
    android:id="@+id/button2"
    android:layout_column="0"
    android:layout_gravity="left|top"
    android:layout_row="0"
    android:text="@string/button_name" />

<Button
    android:id="@+id/button4"
    android:layout_column="0"
    android:layout_gravity="left|top"
    android:layout_row="2"
    android:text="@string/button_name" />

 <Button
    android:id="@+id/button5"
    android:layout_column="1"
    android:layout_row="2"
    android:layout_columnSpan="2"
    android:layout_gravity="fill"
    android:text="@string/button_name" />

在我的智能手机上编写此代码可能看起来有点乱:)