- 动态添加布局的两种方式
动态添加xml布局
- 另外写一个xml布局,然后通过java的方式让他加载他主布局上
动态添加java布局
- 通过java写出一个布局,然后再通过java的方式让他加载他主布局上
- 1、动态添加xml布局
步骤:
第一步:构造容器
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
第二步:构造xml文件
主布局添加控件
第三步:构造LayoutInflater
提到addview,首先要了解一下LayoutInflater类。这个类最主要的功能就是实现将xml表述的layout转化为View的功能。为了便于理解,我们可以将它与findViewById()作一比较,二者都是实例化某一对象,不同的是findViewById()是找xml布局文件下的具体widget控件实例化,而LayoutInflater找res/layout/下的xml布局文件来实例化的。
而LayoutInflater有三种方式
LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或
LayoutInflater inflater = LayoutInflater.from(Activity.this);或
LayoutInflater inflater = getLayoutInflater();
这三种方法本质是相同的。
第四步inflate()加载布局
用LayoutInflater.inflate() 将LayOut文件转化成VIew。
View view = inflater.inflate(R.layout.block_gym_album_list_item, null);
this.addContentView(view,lp);
关于第一步显示布局的详细介绍
改变布局主要是通过改变LayoutParams来实现的,LayoutParams继承于Android.View.ViewGroup.LayoutParams。它相当于一个Layout的信息包,封装了Layout的位置、高、宽等信息。需要注意的是,需要注意到要修改的View的父容器是什么类型的,FrameLayout,LinearLayout,RelativeLayout等,因为不同类型的LayoutParams是不同的。
上述代码与以下xml布局代码作用相同:
<LinearLayout>
<View
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
</LinearLayout>
2、动态添加java布局
我们这里还是以TextView为例,其实动态添加java布局和xml布局有异曲同工之处,无非就是用java的方式写出控件,然后添加进布局里
第一步构造容器
和上面xml布局的一样,所以这里就不贴了
第二步构造控件布局框架
其实和xml的第二步也是一样的,只不过xml已经写好了最外层的布局,所以我们也要用java写出一个布局,好在里面放控件
LinearLayout view = new LinearLayout(this);
view.setLayoutParams(lp);//设置布局参数
view.setOrientation(LinearLayout.HORIZONTAL);// 设置子View的Linearlayout// 为垂直方向布局
//定义子View中两个元素的布局
ViewGroup.LayoutParams vlp = new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
第三步添加控件
其实这一步也没有什么好讲的,就是xml添加控件的方式改成java添加
TextView tv1 = new TextView(this);
tv1.setLayoutParams(vlp);//设置TextView的布局
tv1.setText("姓名:");
第四步将控件添加至容器
view.addView(tv1);//将TextView 添加到子View 中
注:上述的十三就是十五的动态添加java布局
















