我想在水平空间中显示几个按钮(范围在1-5之间)。
每个空间应占用相等的空间。
根据当前用户的状态,按钮将被隐藏并动态显示。
理想情况下,在我的java代码中,我只希望通过setVisibility()来控制按钮的可见性
有没有办法整理我的布局,以便我的按钮的宽度始终分布在整个屏幕的宽度上?
我考虑使用相对布局,按钮会逐个排列,但我从来没有这样做。或者,我可以使用linearLayout和布局总和,并为每个按钮分配权重1.但是当我隐藏按钮时,按钮的其余部分不会重新调整并占用剩余空间。
答案 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,可以自动调整剩余按钮的大小并显示可见性。我自己测试了这段代码以确保它的功能。
答案 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>