Android 继承ViewGroup研究(3)

这节我们研究的是在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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值