Android将水平空间均分为N段

时间:2018-01-10 21:12:34

标签: android layout

我想在水平空间中显示几个按钮(范围在1-5之间)。

每个空间应占用相等的空间。

根据当前用户的状态,按钮将被隐藏并动态显示。

理想情况下,在我的java代码中,我只希望通过setVisibility()来控制按钮的可见性

有没有办法整理我的布局,以便我的按钮的宽度始终分布在整个屏幕的宽度上?

我考虑使用相对布局,按钮会逐个排列,但我从来没有这样做。或者,我可以使用linearLayout和布局总和,并为每个按钮分配权重1.但是当我隐藏按钮时,按钮的其余部分不会重新调整并占用剩余空间。

3 个答案:

答案 0 :(得分:2)

使用水平方向的LinearLayout。对于您的每个Button,请使用以下属性:

    android:layout_width="0dp"
    android:layout_weight="1"

不要在父weightSum上添加LinearLayout属性。省略此属性将导致按钮调整大小,因为显示和隐藏了一些按钮。

答案 1 :(得分:0)

只需使用水平方向的LinearLayout(当您在LinearLayout中放置多个元素并且不提及方向属性时应该给出错误)并简单地放置按钮。只需在按钮中包含weight = 1属性即可平均分配空间。

XML文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.nero.myapplication.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_gravity="bottom">

            <Button
                android:id="@+id/button1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="1"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="2"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/button3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="3"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/button4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="4"
                android:layout_weight="1"/>
            <Button
                android:id="@+id/button5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="5"
                android:layout_weight="1"/>

    </LinearLayout>

MainActivity Class

public class MainActivity extends AppCompatActivity {

Button btn1, btn2, btn3, btn4, btn5;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btn1 = findViewById(R.id.button1);
    btn2 = findViewById(R.id.button2);
    btn3 = findViewById(R.id.button3);
    btn4 = findViewById(R.id.button4);
    btn5 = findViewById(R.id.button5);

    btn1.setVisibility(View.GONE);

    }
}

通过将按钮的可见性设置为GONE,可以自动调整剩余按钮的大小并显示可见性。我自己测试了这段代码以确保它的功能。

Result as asked in question

答案 2 :(得分:0)

使用LinearLayout的另一种方法是使用ConstraintLayout。水平链中的所有东西都将被分配相同的空间。

下面的伪代码

<ConstraintLayout>
    <View 
        android:id="@+id/one"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_leftToLeftOf="parent"
        app:layout_rightToLeftOf="@id/two"
    />

    <View 
        android:id="@+id/two"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_leftToRightOf="@id/one"
        app:layout_rightToLeftOf="@id/three"
    />

    <View 
        android:id="@+id/three"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_leftToRightOf="@id/two"
        app:layout_rightToRightOf="parent"
    />
</ConstraintLayout>