Android在XML文件中写布局很方便, 但有时候不够灵活, 有时候我们需要动态添加View或者ViewGroup.
点击动态添加TextView:
Android 动态设置布局属性_第1张图片

 private LinearLayout mLinearLayout;    private int i = 1;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mLinearLayout = (LinearLayout) findViewById(R.id.container);        Button button = (Button) findViewById(R.id.button);        button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                TextView textView = new TextView(MainActivity.this);                LinearLayout.LayoutParams tvLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,                        LinearLayout.LayoutParams.WRAP_CONTENT);                textView.setLayoutParams(tvLayoutParams);                textView.setText("动态添加的TextView" + "--" + i++);                textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20.0F);                textView.setGravity(Gravity.CENTER);                mLinearLayout.addView(textView);            }        });    }

activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/container"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:divider="@drawable/divider_shape"    android:orientation="vertical"    android:showDividers="middle|end">    <Button        android:id="@+id/button"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="添加" />LinearLayout>

divider_shape.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android">    <size android:height="1dp" />    <solid android:color="@color/colorAccent" />shape>
@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        LinearLayout linearLayout = new LinearLayout(this);        //LayoutParams有多个, 注意看情况使用        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,                LinearLayout.LayoutParams.MATCH_PARENT);        linearLayout.setLayoutParams(layoutParams);        linearLayout.setBackgroundColor(Color.GRAY);        linearLayout.setOrientation(LinearLayout.HORIZONTAL);        linearLayout.setGravity(Gravity.CENTER_VERTICAL);        TextView textView = new TextView(this);        LinearLayout.LayoutParams tvLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,                LinearLayout.LayoutParams.WRAP_CONTENT);        tvLayoutParams.weight = 1; //LinearLayout.LayoutParams 里有weight属性        textView.setLayoutParams(tvLayoutParams);        textView.setText("动态添加的TextView");        //第一个参数可以指定单位, 如 TypedValue.COMPLEX_UNIT_SP代表SP        //TypedValue.COMPLEX_UNIT_DIP 代表DP        //TypedValue.COMPLEX_UNIT_PX 代表PX        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20.0F);        textView.setTextColor(Color.RED);        textView.setGravity(Gravity.CENTER);        textView.setBackgroundColor(Color.GREEN);        ImageView imageView = new ImageView(this);        LinearLayout.LayoutParams imageLayoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,                LinearLayout.LayoutParams.WRAP_CONTENT);        imageLayoutParams.leftMargin = 100;        imageLayoutParams.rightMargin = 100;        imageView.setLayoutParams(imageLayoutParams);        imageView.setImageResource(R.mipmap.ic_launcher);        linearLayout.addView(textView);//添加到ViewGroup中        linearLayout.addView(imageView);//添加到ViewGroup中        setContentView(linearLayout);

Android 动态设置布局属性_第2张图片

RelativeLayout的

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        RelativeLayout relativeLayout = new RelativeLayout(this);        //LayoutParams有多个, 注意看情况使用        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,                RelativeLayout.LayoutParams.MATCH_PARENT);        relativeLayout.setLayoutParams(layoutParams);        relativeLayout.setBackgroundColor(Color.GRAY);        TextView textView = new TextView(this);        RelativeLayout.LayoutParams tvLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,                RelativeLayout.LayoutParams.WRAP_CONTENT);        tvLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);//addRule        textView.setLayoutParams(tvLayoutParams);        textView.setText("动态添加的TextView");        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20.0F);        textView.setTextColor(Color.RED);        textView.setGravity(Gravity.CENTER);        textView.setBackgroundColor(Color.GREEN);        ImageView imageView = new ImageView(this);        RelativeLayout.LayoutParams imageLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,                RelativeLayout.LayoutParams.WRAP_CONTENT);        imageLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_END);        imageView.setLayoutParams(imageLayoutParams);        imageView.setImageResource(R.mipmap.ic_launcher);        ImageView imageView2 = new ImageView(this);        RelativeLayout.LayoutParams imageLayoutParams2 = new RelativeLayout.LayoutParams                (RelativeLayout.LayoutParams.WRAP_CONTENT,                RelativeLayout.LayoutParams.WRAP_CONTENT);        imageLayoutParams2.addRule(RelativeLayout.ALIGN_PARENT_END);        imageLayoutParams2.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);        imageView2.setLayoutParams(imageLayoutParams2);        imageView2.setImageResource(R.mipmap.ic_launcher);        relativeLayout.addView(textView);        relativeLayout.addView(imageView);        relativeLayout.addView(imageView2);        setContentView(relativeLayout);    }

Android 动态设置布局属性_第3张图片

addRule支持如下属性

Android 动态设置布局属性_第4张图片

LayoutParams

可以看到, LayoutParams 前面有很多:
RelativeLayout.LayoutParams
LinearLayout.LayoutParams
ViewGroup.LayoutParams …
选择的时候主要是根据其父布局来选择.

更多相关文章

  1. Android布局管理器
  2. Android中动态添加╱删除的Spinner菜单
  3. android中TextView和EditText控件一些属性
  4. Android 弹出键盘向上顶布局

随机推荐

  1. 老罗Android开发视频教程(Android入门介绍
  2. Android(安卓)Intent 用法汇总
  3. Android(安卓)平台搭建
  4. 局域网内搭建Android(安卓)SDK更新源
  5. Android开机广播
  6. android布局 LinearLayout和RelativeLayo
  7. Android学习—— Android资料之-系统自带
  8. android 参数含义
  9. CSDN 很经典的博客 您值得一览
  10. 那些年收藏的技术文章(一)-CSDN篇