Android LinearLayout 线性布局 3
前面几节我们都是在 activity_main.xml
中写死了 android:layout_weight
属性,如果我们需要在 Java 代码中动态更改 layout_weight
属性要怎么做呢?
android.view.ViewGroup 类提供了 setLayoutParams() 方法用来修改 android:layout_*
属性
void setLayoutParams (ViewGroup.LayoutParams params)
调用方法如下
setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1));
LayoutParams() 实例化时的三个参数分别为
- layout_width 的值
- layout_height 的值
- layout_weight 的值
范例
首先创建一个 空的 Android 项目 cn.twle.android.linearlayout
接着修改 activity_main.xml
创建一个四列一一一一开布局 ( 使用 wrap_content )
为了在 Java 中调用方便,我们给父 <LinearLayout
设置一个 id android:id="@+id/LinearLayout1"
给第三个子 <LinearLayout
设置 id android:id="@+id/cyan"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="#ff0000" android:layout_weight="1"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="#00ff00" android:layout_weight="1"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="#00ffff" android:layout_weight="1" android:id="@+id/cyan"> <LinearLayout android:layout_width="wrap_content" android:layout_height="fill_parent" android:background="#0000ff" android:layout_weight="1"/> </LinearLayout>
运行结果如下
然后修改 MainActivity.java
设置第三个 LinearLayout 的权重为 2
package cn.twle.android.linearlayout55; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取第三个 LinearLayout 实例 LinearLayout linearLayout = (LinearLayout) findViewById(R.id.cyan); // 创建一个 LayoutParam 实例 LinearLayout.LayoutParams lyParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.MATCH_PARENT,2); // 设置布局参数 linearLayout.setLayoutParams(lyParams); } }
运行结果如下图,我们发现第三个 LinearLayout 的权重已经变成 2 了