标签:viewgroup
在继承ViewGroup时有三个重要的方法,下面我们就来看看:
 
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 null;
        }
}
 
 这个方法用来返回指定位置的View。
 注意:ViewGroup中的View是从0开始计数的。
 可以说我们自定义ViewGroup时这三个方法是至关重要的,下面我们就来看看自定义ViewGroup使用。
 
 
我们新建一个叫AndroidViewGroup的工程,Activity起名为MainActivity。在写一个继承于ViewGroup的类,名叫HelloViewGroup。
public class HelloViewGroup extends ViewGroup {
    public HelloViewGroup(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }
    
    public HelloViewGroup(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }
    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        // TODO Auto-generated method stub
    }
}
 
 
-->MainActivity类
public class MainActivity 
extends Activity {
    
/** Called when the activity is first created. */
     public void onCreate(Bundle savedInstanceState) {
        
super.onCreate(savedInstanceState);
        setContentView(
new HelloViewGroup(
this));
    }
}
 
 
 
这时你可以运行一下,发现屏幕除了状态栏了那个Label是一片黑,呵呵。下面我们来修改代码,让自己的ViewGroup火起来。
我们新建一个名叫myAddView的方法,这个方法用来向ViewGroup中添加组件:
 
/**
     * 添加View的方法
     * */
    public void myAddView(){
        ImageView mIcon = new ImageView(mContext);
        mIcon.setImageResource(R.drawable.haha);
        addView(mIcon);
    }
 
 
然后我们修改onLayout方法:
@Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        View v = getChildAt(0);
        v.layout(l, t, r, b);
    }
 
 
ViewGroup的三个方法
标签:viewgroup
原文地址:http://blog.csdn.net/lee_my_/article/details/45645891