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的解释还是比较清楚的,通过这个我们可以看出几点:

1ViewGroup是一个容器,而这个容器是继承与View的。

2ViewGroup是一个基类,并且是Layout和一些View组件的基类。

1onLayout方法

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开始计数的。

简单测试:

创建一个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中只要:

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(new MyViewGroup(this));
	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值