1.布局作用:
对控件排列出最实用的效果。
2.布局的嵌套:
布局还可以套用其他布局,更好实现界面多样化以及设计的灵活性。
3.布局方式:
(1).使用XML布局——(官方推荐)
好处:
[1].简单明了;
[2].符合MVC原则(实现了表现和处理的分离)。
注意:XML相对布局加载时是按照前后顺序加载的。
相对布局上面编写控件id不能依赖于布局下面的编写的id。
(比如,id的声明写成android:layout_below="@+id/下面View的id"就是不对的。)
(2).使用Java布局——(不推荐,除非特殊需求)
功能:
[1].用new创建控件;
[2].通过代码控制控件。
4.布局方式混合使用:
方法(1). 显示制定文件视图 setContentView(R.layout.xml文件名);
方法(2). 访问、获得指定控件 findViewById(R.id.id名)。
用include标签实现布局的重用
——把一个布局当成另一个布局的一个子布局,提高代码的重用性。
需求:
在一个项目中,我们可能会在xml中局部用到相同的布局,
若在不同xml中重写这些布局,代码显得冗余、修改也很烦恼。
对策:
把这些相同的局部布局写成一个单独的xml布局模块,
在需要使用它的xml中引入,
而引入的基本格式为:<include layout="@layout/被重用的布局文件名" />
注意:
1.在RelativeLayout中使用include标签,若要用位置属性控制它,
必先重写宽高属性,否则不报错也无效果。
2.区分include标签和被引用的根布局的id属性:
(1) include标签在没声明id时,
被引用的跟布局id可被直接调用:
@做法:this.findViewById( R.id.被引用的根布局的id );
这样可以(不把他当外人用[好比自己人],好比只是引用了一堆人)
(2) include标签在被声明id后,
就不能调用被引用的跟布局id:
@错误的做法:
this.findViewById( R.id.被引用根布局id );
这样编译通过,运行会报错,返回值为null。
@正确的做法:
做法1:
View layout = this.findViewById( R.id.include标签的id );
(XxxLayout)layout.findViewById( R.id.被引用的根布局的id );
做法:2:
View layout = getLayoutInflater().inflate( R.layout.被引用布局文件名, null );
(XxxLayout)layout.findViewById( R.id.被引用的根布局的id )。