我有一个垂直的LinearLayout LL_p,它有两个子水平LinearLayouts LL_1和LL_2,它们又各自有自己的子元素。根据LL_1和LL_2的可见内容,我想动态地改变它们在LL_p中的相对权重。我已经有一个包含大量细节的xml布局,不希望丢失它,所以我只需要增量地改变权重。我该怎么做?这是我的xml:
…
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight=“0.2”
android:orientation="vertical" >
<LinearLayout
android:id="@+id/ll_1”
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.55"
android:background="@drawable/some_image”
android:orientation="vertical" >
<!—- a number of includes —>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_2”
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.45"
android:layout_marginBottom="@dimen/dim_1”
android:background="@color/some_color”
android:orientation="horizontal" >
<!—- a number of children —>
</LinearLayout>
</LinearLayout>
</LinearLayout>
所以在Java活动类中,我需要以下方法,但我需要帮助完成它。请注意,我没有实例化新的布局参数,因为那样会导致我失去我的xml布局细节;相反,我使用getLayoutParams
从xml中获取一个设置。那么,我如何使获得的布局权重改变呢?
private void adjustMYLayout(boolean flip) {
LayoutParams layout1 = mLL1.getLayoutParams();
LayoutParams layout2 = mBLL2.getLayoutParams();
//now what?
if(flip) {//set one weight system
}else {
//set other weight system
}
}
@nKn 的更新
private void adjustMYLayout(boolean flip) {
if (flip) {
mLL1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 0.8f));
mLL2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 0.2f));
} else {
mLL1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 0.55f));
mLL2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT, 0.45f));
}
}
setMargins(0,0,0,convertedDp2Px)
添加回去。我的问题是特别为了避免这样的“混乱”。我希望Android提供更好的更改权重的功能。 - Katedral PillonLinearLayout.LayoutParams.WRAP_CONTENT
更改为0
使其正常工作。 - Katedral Pillon