View类
1,android.view类是个最基本的UI类,android上很多UI组件都是继承此类而实现的。
2,这些UI组件包括Button(按钮), TextView(文本框),CheckBox(选字框)等等。
3,那么这些UI组件应该怎么放置呢?
ViewGroup类
1,上面所说的UI组件是放置到一个专门的view容器中,这个View容器就是ViewGroup。
2,ViewGroup的作用就是对添加进它的View组件进行布局。
3,可惜,android.view.ViewGoup类是抽象类,不能直接使用它。
ViewGroup类的实现
对ViewGoup的实现的类有很多,它们有着各自的布局特点,比如LinearLayout类是把它包括的元素按照水平和竖直的方向排列。
Android关于ViewGroup的解释还是比较清楚的,通过这个我们可以看出几点:
1、ViewGroup是一个容器,而这个容器是继承与View的。
2、ViewGroup是一个基类,并且是Layout和一些View组件的基类。
1、onLayout方法
}
在我们继承ViewGroup时会在除了构造函数之外提供这个方法,我们可以看到,在ViewGroup的源代码中方法是这样定义的,也就是父类没有提供方法的内容,需要我们自己实现。
当View要为所有子对象分配大小和位置时,调用此方法
2、addView方法
addView(child, -1);
}
这个方法是用来想View容器中添加组件用的。我们可以使用这个方法想这个ViewGroup中添加组件。
3、getChildAt方法
try {
return mChildren[index];
} catch (IndexOutOfBoundsException ex) {
return ;
}
}
这个方法用来返回指定位置的View。
注意:ViewGroup中的View是从0开始计数的。
简单测试:
创建一个MyViewGroup继承ViewGroup
- public class MyViewGroup extends ViewGroup {
- public MyViewGroup(Context context) {
- super(context);
- myAddView();
- }
- @Override
- protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
- View v = getChildAt(0);
- v.layout(arg1,arg2,arg3,arg4);
- }
- @Override
- public void addView(View child) {
- super.addView(child);
- }
- public void myAddView(){
- ImageView mIcon = new ImageView(this.getContext());
- mIcon.setImageResource(R.drawable.guid_image);
- addView(mIcon);
- }
- }
mainActivity中只要:public class MyViewGroup extends ViewGroup {
public MyViewGroup(Context context) { super(context); myAddView(); } @Override protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) { View v = getChildAt(0); v.layout(arg1,arg2,arg3,arg4); } @Override public void addView(View child) { super.addView(child); } public void myAddView(){ ImageView mIcon = new ImageView(this.getContext()); mIcon.setImageResource(R.drawable.guid_image); addView(mIcon); }
}
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- this.setContentView(new MyViewGroup(this));
- }
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(new MyViewGroup(this));
}