在XML向ViewGroup中添加组件

前端之家收集整理的这篇文章主要介绍了在XML向ViewGroup中添加组件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

一、简述

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

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

  1. <com.fxhy.stady.myviewGroup.HelloViewGroup

  2. android:layout_width=“fill_parent”

  3. android:layout_height=“fill_parent”>

  4. <TextView

  5. android:layout_height=“wrap_content”

  6. android:layout_width=“fill_parent”

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

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

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

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

27023911_1.png

二、为啥不显示

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

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

下面给出代码

  1. @Override

  2. protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){

  3. //TODOAuto-generatedmethodstub

  4. super.onMeasure(widthMeasureSpec,heightMeasureSpec);

  5. intchildCount=getChildCount();

  6. for(inti=0;i<childCount;i++){

  7. Viewv=getChildAt(i);

  8. v.measure(widthMeasureSpec,heightMeasureSpec);

  9. }

  10. }

  11. @Override

  12. protectedvoidonLayout(booleanchanged,intl,intt,intr,intb){

  13. intchildCount=getChildCount();

  14. for(inti=0;i<childCount;i++){

  15. Viewv=getChildAt(i);

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

  17. }

  18. }

运行效果

27023911_2.png

三、注意

各位读者请注意:

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

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

猜你在找的XML相关文章