首页 自定义ViewGroup 在ViewGroup中显示TextView

自定义ViewGroup 在ViewGroup中显示TextView

举报
开通vip

自定义ViewGroup 在ViewGroup中显示TextView自定义ViewGroup在ViewGroup中显示TextView1、继承ViewGroup必须要实现其构造方法和一个onLayout方法构造函数的处理:publicCusViewGroup(Contextcontext){this(context,null);}publicCusViewGroup(Contextcontext,AttributeSetattrs){this(context,attrs,0);}publicCusViewGroup(Contextcontext,AttributeSetattrs,...

自定义ViewGroup 在ViewGroup中显示TextView
自定义ViewGroup在ViewGroup中显示TextView1、继承ViewGroup必须要实现其构造方法和一个onLayout方法构造函数的处理:publicCusViewGroup(Contextcontext){this(context,null);}publicCusViewGroup(Contextcontext,AttributeSetattrs){this(context,attrs,0);}publicCusViewGroup(Contextcontext,AttributeSetattrs,intdefStyleAttr){super(context,attrs,defStyleAttr);}注意构造函数中的this。自定义ViewGroup也能够有自己的属性,对于属性的操作和自定义View一致。(在Style中添加自定义属性,在构造函数中获取到layout中设置的自定义属性的值)onLayout():疑问:为什么必须要重写onLayout方法?–自定义ViewGroup相当于是一个容器,里面能够放置很多View,这些View的位置由onLayout来确定。必须指定位置,才能显示到容器的对应位置上。疑问:onLayout的几个参数是什么意思l、t、r、b是自定义ViewGroup父控件中设置的Padding值。2、自定义ViewGroup的执行过程构造函数—–获取自定义属性onMeasure—控件宽、高以及measure子控件onLayout—–控件的位置,子View的位置onDraw——画画咯onMeasure:自定义ViewGrouponMeasure代码/***确定ViewGroup的宽高**@paramwidthMeasureSpec 宽参数*@paramheightMeasureSpec高参数*/@OverrideprotectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){//ViewGroup主要是一个容器,当ViewGroup的宽高是确切的值的时候,控件的宽高就是它本身设置的值//主要是考虑ViewGroupWrap_content的时,需要计算控件的宽高,控件的宽高根据子View的布局来计算intwidth;intheight;intmWidthMeasureMode=MeasureSpec.getMode(widthMeasureSpec);measureChildren(widthMeasureSpec,heightMeasureSpec);//初始化所有子View的宽高if(mWidthMeasureMode==MeasureSpec.AT_MOST){//Wrap_content的情况//测量子View的宽 怎么测量子View的宽//由于这里只有一个控件,暂时从这个一个控件开始学习ViewchildView=getChildAt(0);//获取到这个控件width=childView.getMeasuredWidth();}else{width=MeasureSpec.getSize(widthMeasureSpec);}intmHeightMeasureMode=MeasureSpec.getMode(heightMeasureSpec);if(mHeightMeasureMode==MeasureSpec.AT_MOST){ViewchildView=getChildAt(0);height=childView.getMeasuredHeight();}else{height=MeasureSpec.getSize(heightMeasureSpec);}setMeasuredDimension(width,height);}测试布局文件:这里只设置了自定义ViewGroup的宽度wrap_content效果:宽度此时就为TextView的宽度高度还是自定义控件的高度这个时候,你发现TextView根本没有显示到界面上,进入下一步onLayout疑问:onLayout():控件摆放到什么位置?—onLayout的几个参数是父控件的padding值疑问:是否能够改变padding值?—不能,子控件怎么能够设置父控件的属性呢!!疑问:怎么将TextView显示到界面上?/***必须实现的方法,自定义ViewGroup的child位置布局**@paramchanged*@paraml   ViewGroup父类paddingLeft*@paramt   paddingTop*@paramr   paddingRight*@paramb   paddingBottom*/@OverrideprotectedvoidonLayout(booleanchanged,intl,intt,intr,intb){Log.e(TAG,"paddingLeft="l";paddingTop="t";paddingRight="r";paddingBottom="b);//是否能对自定义ViewGroup再进行位置的变换?不能!!!!!//将TextView显示出来ViewchildView=getChildAt(0);childView.layout(0,0,childView.getMeasuredWidth(),childView.getMeasuredHeight());}显示结果:到此就基本完成了ViewGroup的简单示例自定义ViewGroup代码:ViewGroup:packagecom.tjstudy.cusviewgroupdemo.customerview;importandroid.content.Context;importandroid.util.AttributeSet;importandroid.view.View;importandroid.view.ViewGroup;/***自定义ViewGroup按效果显示两个TextView*/publicclassCusViewGroupextendsViewGroup{publicstaticfinalStringTAG="CusViewGroup";privateintchildCount;publicCusViewGroup(Contextcontext){this(context,null);}publicCusViewGroup(Contextcontext,AttributeSetattrs){this(context,attrs,0);}publicCusViewGroup(Contextcontext,AttributeSetattrs,intdefStyleAttr){super(context,attrs,defStyleAttr);}/***必须实现的方法,自定义ViewGroup的child位置布局**@paramchanged*@paraml   ViewGroup父类paddingLeft*@paramt   paddingTop*@paramr   paddingRight*@paramb   paddingBottom*/@OverrideprotectedvoidonLayout(booleanchanged,intl,intt,intr,intb){intcl=0;intct=0;intcr=0;intcb=0;inth=0;//由于两个控件垂直放置,需要记录高度//为每一个子View指定位置 所需效果:查看mipmap里面的效果图for(inti=0;imaxWidth)?width:maxWidth;}width=maxWidth;}else{width=MeasureSpec.getSize(widthMeasureSpec);}intmHeightMeasureMode=MeasureSpec.getMode(heightMeasureSpec);if(mHeightMeasureMode==MeasureSpec.AT_MOST){for(inti=0;i疑问:对于自定义ViewGroup,应该还会有margin、padding等的设置,这些设置是否会对ViewGroup或者子控件的位置有影响?原代码打印信息打印结果:设置marginpaddingandroid:padding="10dp"android:layout_margin="60dp"打印信息:效果有变化,但是在自定义ViewGroup中打印的log信息确是相同的理解:在自定义ViewGroup中,onLayout中默认情况下已经计算了padding的值,margin是自定义控件本身到自定义控件父控件的位置,不会对子View有影响。
本文档为【自定义ViewGroup 在ViewGroup中显示TextView】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_751406
暂无简介~
格式:doc
大小:33KB
软件:Word
页数:21
分类:
上传时间:2022-08-01
浏览量:0