android - 以编程方式设置 LinearLayout 子项的权重

标签 android xml android-layout android-linearlayout

<分区>

我有一个垂直的 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 Activity 类中,我认为我需要以下方法,但我需要帮助来完成它。请注意,我没有实例化新的布局参数,因为那样会导致我丢失 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));
  }
}

最佳答案

您可以通过声明一个 LinearLayout.LayoutParams 对象来实现这一点

tv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1f));

第三个参数(1f)是布局的权重(在本例中为 1(f 代表 float))。

关于android - 以编程方式设置 LinearLayout 子项的权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23142379/

相关文章:

android - 读取传入消息,直到读取验证短信

android - Android 中的 setPreviewSize() 错误?

xml - 加载样式表时出错 : Parsing an XSLT stylesheet failed

jquery - 在 Safari 中使用 JQuery 解析 XML

xml - XPath:按特定顺序搜索多个节点

android - ToolBar 与包含 fragment 的内容(LinearLayout)重叠

java - 什么是 isInEditMode() 和 if(isInEditMode()) 返回;

Android:Google Play 服务中的 Google Analytics 可用性?

java - <Android>无法启动 Activity ComponentInfo

java - 宽度和高度匹配问题