我希望两个按钮并排放置,而Add
按钮位于Remove
按钮的左侧。这些按钮以编程方式插入。当只有一个按钮时,它应该占据所有空间。到目前为止,我有这个:
<LinearLayout
android:id="@+id/buttonLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<include layout="@layout/add_button" />
<include layout="@layout/remove_button" />
</LinearLayout>
添加按钮文件:
<?xml version="1.0" encoding="utf-8"?>
<Button
android:id="@+id/addAdditionalColors"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:onClick="addColor"
android:text="@string/addMore"
xmlns:android="http://schemas.android.com/apk/res/android" />
删除按钮文件:
<?xml version="1.0" encoding="utf-8"?>
<Button
android:id="@+id/removeAdditionalColors"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/remove"
xmlns:android="http://schemas.android.com/apk/res/android" />
这是我想要的方式。移除一个按钮后,另一按钮将占据屏幕的整个宽度。但是,假设我在屏幕上有一个Remove
按钮,并且正在以编程方式添加Add
按钮。由于它是最后添加的,因此将添加到Remove
的右侧。如何避免这种情况(最好在XML文件中),而不是删除两个按钮并使用Java按顺序添加它们?这是所需的位置:
编辑: 我尝试在添加视图时添加索引:
buttonLayout.addView(removeButton, 1);
和
buttonLayout.addView(addButton, 0);
定位是正确的,但是由于某些原因,即使我将按钮的宽度设置为match_parent,也不是所有空间都被填满了。请查看视频HERE。
这是处理按钮更新的完整代码:
public void addColor(View view){
//do stuff
if(numColors == 4){
removeView(findViewById(R.id.addAdditionalColors));
//function above appears to work fine
}
else if(numColors == 3){
final View removeButton = inflater.inflate(R.layout.remove_button, null);
buttonLayout.addView(removeButton, 1);
}
}
public void removeColor(View view){
//do stuff
if(numColors == 3) {
final View addButton = inflater.inflate(R.layout.add_button, null);
buttonLayout.addView(addButton, 0);
}
else if(numColors == 2){
removeView(findViewById(R.id.removeAdditionalColors));
}
}
答案 0 :(得分:2)
要添加到LinearLayout的末尾,请执行以下操作:
linearLayout.addView(view);
要添加到LinearLayout的开头,请执行以下操作:
linearLayout.addView(view, 0);
上面的第二个addView()
方法采用一个索引参数,并通过传递0
来告知它希望新视图位于所有其他视图之前。
以编程方式添加的视图不能完全覆盖整个原因的原因是,此行为是三件事的组合:
layout_weight
属性null
作为父参数layout_
属性在没有父项的情况下会被忽略要使所有功能正常工作,您可以做的最小更改就是更改:
final View removeButton = inflater.inflate(R.layout.remove_button, null);
对此:
final View removeButton = inflater.inflate(R.layout.remove_button, buttonLayout, false);
通过将buttonLayout
作为父级,您的layout_weight
属性将能够正常运行。当然,您还必须对“添加”按钮进行类似的更改。