加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在XML向ViewGroup中添加组件

发布时间:2020-12-16 05:03:34 所属栏目:百科 来源:网络整理
导读:我们研究的是在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博客

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读