分享

Android 继承ViewGroup研究(3)–在XML向ViewGroup中添加组件 ...

 點點滴滴 2012-09-19

Android 继承ViewGroup研究(3)–在XML向ViewGroup中添加组件 by lwl139678

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

 

一、简述

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

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

  1. <com.fxhy.stady.myviewGroup.HelloViewGroup
  2.  
  3.       android:layout_width=“fill_parent”
  4.  
  5.       android:layout_height=“fill_parent”>
  6.  
  7.       <TextView
  8.  
  9.             android:layout_height=“wrap_content”
  10.  
  11.             android:layout_width=“fill_parent”
  12.  
  13.             android:text=“繁星皓月继承ViewGroup研究”/>
  14.  
  15.     </com.fxhy.stady.myviewGroup.HelloViewGroup>

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

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

二、为啥不显示

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

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

下面给出代码:

  1. @Override
  2.  
  3.      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  4.  
  5.           // TODO Auto-generated method stub
  6.  
  7.           super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  8.  
  9.           int childCount = getChildCount();
  10.  
  11.           for(int i = 0; i < childCount; i ++){
  12.  
  13.                View v = getChildAt(i);
  14.  
  15.                v.measure(widthMeasureSpec, heightMeasureSpec);
  16.  
  17.           }
  18.  
  19.      }
  20.  
  21.  
  22.  
  23.  
  24.  
  25. @Override
  26.  
  27.      protected void onLayout(boolean changed, int l, int t, int r, int b) {
  28.  
  29.           int childCount = getChildCount();
  30.  
  31.           for(int i = 0; i < childCount; i ++){
  32.  
  33.                View v = getChildAt(i);
  34.  
  35.                v.layout(l, t, r, b);
  36.  
  37.           }
  38.  
  39.   }

运行效果:

三、注意

各位读者请注意:

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

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

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多