布局管理器
布局管理器都是以ViewGroup为基类派生出来的; 使用布局管理器可以适配不同手机屏幕的分辨率,尺寸大小;
布局管理器之间的继承关系 :
在上面的UML图中可以看出, 绝对布局 帧布局 网格布局 相对布局 线性布局是直接继承ViewGroup,表格布局是继承的LinearLayout;
父容器与本容器属性 :
android_layout...属性是本容器的属性, 定义在这个布局管理器的LayoutParams内部类中, 每个布局管理器都有一个LayoutParams内部类.Android:... 是父容器用来控制子组件的属性.
如android:layout_gravity 是控制组件本身的对齐方式
android:gravity是控制本容器子组件的对齐方式;
注意事项:
各布局不要乱用各自的属性。比如把属于AbsoluteLayout布局的android:layout_x和android:layout_y用到LinearLayout布局或RelativeLayout布局,或者把RelativeLayout布局的 below,rightof等属性应用到其他布局中。这样做虽然不会报错,但是根本达不到我们需要的效果。
-
关于android:layout_width=”fill_parent”和android:layout_height=”wrap_content” ,这是对每个布局宽和高的设置。wrap_content可表示随着其中控件的不同而改变这个布局的宽度或高度,类似于自动设置宽和高,fill_parent使布局填充整个屏幕,另外还有一种match_parent,它本质上和 fill_parent 一样,并从API Level8开始替代fill_parent。
布局填充器的三种写法:
setContentView(R.layout.activity_main);
等同于下面二句话:
View view = View.inflate(this, R.layout.activity_main, null);
setContentView(view);
第一种:
setContentView(R.layout.activity_main);
LinearLayout ll = (LinearLayout) findViewById(R.id.ll_content);
View.inflate(this,R.layout.item, ll); //将item布局添加到ll布局中
第二种:
LinearLayout ll = (LinearLayout) findViewById(R.id.ll_content);
LayoutInflater factory = LayoutInflater.from(this);
View view = factory.inflate(R.layout.item, ll);
第三种:
LinearLayout ll = (LinearLayout) findViewById(R.id.ll_content);
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.item, ll);
setContentView(view);