您的位置:首页 > 移动开发 > Android开发

Android 继承ViewGroup研究(3)

2012-06-11 00:07 281 查看



这节我们研究的是在XML中向ViewGroup中添加组件。关于这个的研究可以破费周折,为什么呢??因为向其中添加的组件他都不显示啊。郁闷了好长一段时间,不多最终还是突破了,研究出来了,呵呵,路漫漫其修远兮,吾将上下而求索。继续我们的探索之旅。

一、简述

在XML中向ViewGroup中添加组件,这个问题貌似很简单,但是只有在简单中才会发现不简单,其实好多复杂的东西都是由简单的东西一步一步演化而来的,这是道家所谓的一生二、二生三、三生万物,以后我们还将通过剖析一个布局类来更深入的了解ViewGroup,不过那是后话了,呵呵。

那么我们可以通过怎样的方式来添加了。请看:

<com.fxhy.stady.myviewGroup.HelloViewGroup

android:layout_width=“fill_parent”

android:layout_height=“fill_parent”>

<TextView

android:layout_height=“wrap_content”

android:layout_width=“fill_parent”

android:text=“繁星皓月继承ViewGroup研究”/>

</com.fxhy.stady.myviewGroup.HelloViewGroup>

貌似这个方法可以先ViewGroup中加入组件,但是,实际上我们运行后会发现,其实这个组件是不会显示的。

有兴趣的读者可以运行试试。效果是下面这样的。





二、为啥不显示

那么为啥这个ViewGroup里面的TextView没有显示呢,我也为这个问题困扰过很久,其实,有时候我们不是学不会,而是不会学,知识千万遍,方法有多少。那到底要怎样做呢?

其实很简单,我们只需要在ViewGroup中的onMeasure方法里添加一个对子元素的遍历,并且在onLayout中添加一个布局遍历就实现了简单的布局了。

下面给出代码:

@Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

// TODO Auto-generated method stub

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

int childCount = getChildCount();

for(int i = 0; i < childCount; i ++){

View v = getChildAt(i);

v.measure(widthMeasureSpec, heightMeasureSpec);

}

}

@Override

protected void onLayout(boolean changed, int l, int t, int r, int b) {

int childCount = getChildCount();

for(int i = 0; i < childCount; i ++){

View v = getChildAt(i);

v.layout(l, t, r, b);

}

}

运行效果:





三、注意

各位读者请注意:

以上的方法仅仅是一个实验,实际上布局要比上述的复杂的多,有兴趣的可以看看LinearLayout里面是怎样实现的来研究下,以后如果有时间我会写一篇浅析Android布局的博文,供大家参考。

原创文章,转载请注明: 转载自DEVDIV博客

本文链接地址: Android
继承ViewGroup研究(3)–在XML向ViewGroup中添加组件

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: