ViewGroup的使用

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方法

protected  void onLayout( boolean changed,  int left,  int top,  int right,  int bottom) {

}

在我们继承ViewGroup时会在除了构造函数之外提供这个方法,我们可以看到,在ViewGroup的源代码中方法是这样定义的,也就是父类没有提供方法的内容,需要我们自己实现。

当View要为所有子对象分配大小和位置时,调用此方法

2、addView方法

public  void addView(View child) {
        addView(child, -1);
}

这个方法是用来想View容器中添加组件用的。我们可以使用这个方法想这个ViewGroup中添加组件。

3、getChildAt方法

复制代码
public View getChildAt( int index) {
         try {
             return mChildren[index];
        }  catch (IndexOutOfBoundsException ex) {
             return  ;
        }
}
复制代码

 这个方法用来返回指定位置的View。

 注意:ViewGroup中的View是从0开始计数的。

简单测试:

创建一个MyViewGroup继承ViewGroup


  1. public class MyViewGroup extends ViewGroup {  
  2.   
  3.     public MyViewGroup(Context context) {  
  4.         super(context);  
  5.         myAddView();  
  6.     }  
  7.   
  8.     @Override  
  9.     protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {  
  10.          View v = getChildAt(0);  
  11.          v.layout(arg1,arg2,arg3,arg4);  
  12.     }  
  13.   
  14.     @Override  
  15.     public void addView(View child) {  
  16.         super.addView(child);  
  17.     }  
  18.   
  19.      public void myAddView(){  
  20.             ImageView mIcon = new ImageView(this.getContext());  
  21.             mIcon.setImageResource(R.drawable.guid_image);  
  22.             addView(mIcon);  
  23.         }  
  24. }  
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中只要:


  1. @Override  
  2. protected void onCreate(Bundle savedInstanceState) {  
  3.     super.onCreate(savedInstanceState);  
  4.     this.setContentView(new MyViewGroup(this));  
  5. }  
 @Override 
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(new MyViewGroup(this));
}




  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值