自定义view view自定义属性性的问题

怎么实现自定义view 及其属性_百度知道
怎么实现自定义view 及其属性
我有更好的答案
越少越好 为了加速视图,从那些调用频繁的活动中减少不必要的代码。在OnDraw()方法中开始绘制,它会给你最大的 效益。特别低,你也应该减少在onDraw()方法中的内存分配,因为任何内存分配都可能导致内存回收,这将会 引起不连贯。
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。android自定义view之自定义属性 - 简书
android自定义view之自定义属性
这两天在Android中用到了自定义view,在自定义view时也顺便使用了下自定义属性。自定义属性以前只是耳闻 未曾谋面,这次借机会对自定义属性进行了一番学习,顺便总结了一下自定义属性的使用。
下面扫盲班老司机要开车了,小白快刷卡上车,大神拒载。
Android中经常用到自定义view,既然用了自定义view那就不得不提自定义属性。你是否思考过为什么我们在xml文件中进行布局时可以直接通过android:layout_width="match_parent"就可以设置控件的宽度呢?不只是宽度,几乎控件的所有属性都可以在xml文件中进行设置,这是怎样实现的呢,this is a question
TextView部分属性
我们自定义view时能不能也像系统提供的控件一样在xml文件中设置属性呢。答案是当然可以了,用到的就是今天要说的自定义属性。废话不多说 直接开干。
1,首先在res 的values文件夹下新建一个attrs.xml文件,就是这样
新建的attrs.xml文件
2,开始编写我们需要的属性。
&?xml version="1.0" encoding="utf-8"?&
&resources&
&declare-styleable name="burce"&
&attr name="mHeight" format="integer"/&
&attr name="mWidth" format="integer"/&
&attr name="mName" format="string"/&
&attr name="sex" format="enum"&
&enum name="man" value="0"/&
&enum name="woman" value="1"/&
&attr name="student" format="boolean"/&
&/declare-styleable&
&/resources&
说一下用到的东西
&declare-styleable name="burce"&其中的name的值随便定义一个,不要与系统的起冲突。
&attr name="mHeight" format="integer"/&name就是自定义的属性的名字(比如系统控件的android:layout_width) format 就是属性的类型,这里支持10种类型,常用的有string,integer,boolean等等,这次我们用到了整形,枚举和布尔
注意:我们在自定义属性的名字的时候不能与系统的名字冲突,否则会报错
3,新建一个类继承View类,实现3个构造方法,然后获取我们自定义的属性
public class MyView extends View {
private static final String TAG = "MyView";
public MyView(Context context) {
this(context,null);
public MyView(Context context, AttributeSet attrs) {
this(context, attrs,0);
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray array=context.obtainStyledAttributes(attrs, R.styleable.burce);
heiget=array.getInt(R.styleable.burce_mHeight,0);
width=array.getInt(R.styleable.burce_mWidth,0);
name=array.getString(R.styleable.burce_mName);
sex=array.getInt(R.styleable.burce_sex,0);
student=array.getBoolean(R.styleable.burce_student,true);
array.recycle();
Log.i(TAG, "height: "+heiget);
Log.i(TAG, "width: "+width);
Log.i(TAG, "name: "+name);
Log.i(TAG, "sex: "+sex);
Log.i(TAG, "student: "+student);
TypedArray array=context.obtainStyledAttributes(attrs, R.styleable.burce);
Android Developers
这是Google官方给的解释,就简单说一下两个参数怎么填吧,第一个填形参的attrs,第二个填 R.styleable是固定写法,bruce是&declare-styleable name="burce"&中的name的值。
4,回到MainActivity的布局文件中使用我们的自定义view
&?xml version="1.0" encoding="utf-8"?&
&RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.myviewtest.MainActivity"&
&com.myviewtest.MyView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:mName="bruce"
app:sex="man"
app:mHeight="100"
app:mWidth="100"
app:student="true"/&
&/RelativeLayout&
注意:如果Android studio没有加上命名空间的话需要自己加上xmlns:app="http://schemas.android.com/apk/res-auto" 只有声明了命名空间才能使用自定义属性,不懂啥是命名空间的同学呢自己Google学习一下吧(最近在学C++,我就安C++中的命名空间理解的,如果不正确还请大神赐教)
&attr name="height" format="integer"/& 这里的我们在这用了app命名空间,所有所有的自定义属性的开头都加上了“app:”。
准备工作都做好了接下来我们吧应用跑起来看看吧,这里我们通过打印log查看自定义属性的值。
通过log可以得知 我们在自定义view中成功的获取到了属性的值。好的老司机平安到站,小白有序下车。
由于你遇到了一个假的老司机,文章中如果有不正确的地方还请各位大神在评论区指正,老司机在这里抱拳了。
好好学习 天天向上 good good study day day up
本篇重点讲下自定义属性,当然在进行自定义属性前你还得写至少写2个构造函数: 继承view重写构造此处就不在多说了想详细了解的可以参考下面文章:android view构造函数研究Android中自定义样式与View的构造函数中的第三个参数defStyle的意义 为什么要自定...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
今天总结一下自定义 View 时自定义属性的相关。 定义 在 res/values 中创建 attrs.xml 文件。示例代码: attr 标签定义一个属性,name 是属性的名字,不能和其它属性的名字冲突,format 是属性的格式,可以用给一个属性指定多种格式; dec...
参考文章。http://blog.csdn.net/xmxkf/article/details/http://blog.csdn.net/lmj/article/details/; 1.初始Custom View的构造函数 ...
许多人会有这样那样的抱怨,抱怨自己为什么没有好的家境,为什么没有好的学历,为什么没有好的生活。其实不然,每个人有每个人的生活轨迹,而这些轨迹里一定有痛苦。但,更为重要的是这些痛苦也会催生幸福。所以,与其抱怨,不如乐观的看待生活。
小时候,我和许多人一样,希望自己有一个开心...
我在秋天遇到你 已然冬天 你别忘了加衣
富人买入资产。穷人只有支出。中产阶级购买自以为是资产的负债。 我们工资越来越高,工作越来越努力,但是我们的负债也越来越多,银行的贷款和生活的开支迫使我们辞职了需要马上找到新的工作,要不然生活就不能正常运转。我们可以挣很多钱,但钱不能使我们富有,因为我们没有资产,当然就不会有...
今天家里请客吃饭,突然发现一个有趣的现象,我们称丈夫爸妈的家为婆家,自己父母的家为娘家。而不会称公家或是爸家^_^
话说妇女撑起半边天,在我的观念里,撑起的不仅仅是半边天,而是大半边的天。十月怀胎的是女性,在家庭中承担起育儿责任的往往更多的也是女性。现在的女性出...
咏絮 才微身渺六根浮, 婉目扬清向碧游。 皓结东风千里素, 轻联缟袂一团羞。 不甘落魄沉青冢, 岂令彷徨作楚囚。 夜凛风来花落处, 杳然飞渡玉人楼!Android自定义view自定义属性怎么使用,请牛人指导_百度知道
Android自定义view自定义属性怎么使用,请牛人指导
我有更好的答案
=&&width&&format=&&&enum&&&color&/&&&&&windowSoftInputMode&&&&&&&&&&&flag&name=&&&&/attr&&&&&&attr&name=&match_parent&&format=&string&&/&stateUnspecified&&&R;/&&&&&&attr&name=&&value=&&&&nbsp.demo.ToolBar&&&&&&nbsp.ToolBar);buttonNum&language&&&/&&&&&&attr&name=&&&ta&&&&&&&&&&value=&quot:toolbar=&quot.&&&&&/&&&&&&attr&name=&quot.com/apk/res-auto&&&attr&itemBg&&&在布局文件中使用自定义属性,声明命名空间&LinearLayout&xmlns:android=&http://schemas.android.com/apk/res-auto&&&&&android:layout_width=&value=&&&&&name=&pivotX&&format=&dimension&&/&0x30&quot.&nbsp.android在attrs.xml文件中声明自定义View的类和相应属性及其数据类型&declare-styleable&&&&name=&labelColor&&format=&attr&name=&ToolBar&value=&&nbsp.getResourceId(R;&&nbsp,&1&&/&fraction&quot:orientation=&在自定义View中对自定义属性进行解析TypedArray&&flag&&&&&attr&nbsp:icon=&@drawble/icon&&&&&toolbar:labelColor=&#29C1B2&&&&&toolbar:isVisible=&true&&&&&toolbar:width=&180dp&&&&&toolbar:fromAlpha=&0.5&&&&&toolbar:buttonNum=&3&&&&&toolbar:label=&ToolBar&&&&&toolbar:pivotX=&30%&&&&&toolbar:language=&english&&&&&toolbar:windowSoftInputMode=&stateUnspecified|adjustNothing&&&&&toolbar:itemBackground=&@drawable/bg|#00FF00&/&&/LinearLayout&;=&&&/&&&&&&/attr&name=&isVisible&vertical&&&&reference|color&&/&&name=&fromAlpha&&&&integer&&/&" target="_blank">http://schemas.android.com/apk/res/android&&&&nbsp.getInt(R.styleable.ToolBar_buttonNum,&5);&nbsp.recycle();enum&reference&&/&&format=&boolean&quot
为您推荐:
其他类似问题
android的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&nbsp>&nbsp
&nbsp>&nbsp
android教程 &nbsp>&nbsp
自定义View系列一 自定义View的构造函数,自定义属性
摘要:引:自定义View对于Android开发者是一道坎.虽然说是坎但是也得走过去的!此系列文章作为学习自定义View的一系列学习笔记.自定义View系列一自定义View的构造函数,自定义属性在进入学习自定义View的殿堂,第一件需要弄清楚的事情是该怎么定义自定义View的构造函数.因为这里就是自定义View的入口.哪里调用自定义View的构造函数?会调用自定义View的构造函数莫非就只有两个地方.第一个是通过在代码创建一个自定义的View.如:Viewview=newMyView
引:自定义View对于Android开发者是一道坎.虽然说是坎但是也得走过去的!此系列文章作为学习自定义View的一系列学习笔记.
自定义View系列一 自定义View的构造函数,自定义属性
在进入学习自定义View的殿堂,第一件需要弄清楚的事情是该怎么定义自定义View的构造函数.因为这里就是自定义View的入口.
哪里调用自定义View的构造函数?
会调用自定义View的构造函数莫非就只有两个地方. 第一个是通过在代码创建一个自定义的View.
如: View view = new MyView(this);
第二个就是通过在布局文件使用自定义View,当然这种情况系统会自动调用我们的构造函数.
如: &?xml version=&1.0& encoding=&utf-8&?&&com.example.dsliang.viewdemo.MyView xmlns:android=&http://schemas.android.com/apk/res/android& android:layout_width=&match_parent& android:layout_height=&match_parent&/& 这两种情况的区别: 在代码里面创建MyView对象此时是调用只有个参数的构造函数,在布局文件里面使用MyView这情况系统默认是调用两个参数的构造函数.然而区别就是这样了.为什么通过布局文件使用MyView的时候就会使用两个参数的构造函数呢?我们理所当然的知道在布局文件里面使用一个View的时候会添加各种属性.像layout_width,layout_height等等.然而在创建View的时候就需要获取这些属性吧?事实上就是通过参数传递进去的.所以当在布局文件里面使用View,为啥调用两个参数构造函数就是这原因了!
接下来就看看构造函数的面貌.
该定义什么构造函数?
构造函数本应该不复杂,但是要完全弄清楚就真的就变得有点复杂了.从简单原则出发,我们目标是能把事情说清楚把概念讲明白即可.
一开始View的构造函数就只有三个发展到现在在Api 21引入了4个参数的构造函数(事实上我也没弄懂那是什么玩意).
(前面三个构造函数在Api 1引入,最后一个构造函数(4个参数的)在Api 21才引入)
着重说前面两个构造函数.(方面后面阐述,只有一个参数的构造函数叫C1,两个参数的叫C2如此类推) 前面讨论通过在代码里面创建MyView就是调用C1构造函数.布局使用MyView就是调用C2构造函数. 理解起来也是很简单的.看看最简单的自定义MyView代码吧.
activity_main.xml &?xml version=&1.0& encoding=&utf-8&?&&com.example.dsliang.viewdemo.MyView xmlns:android=&http://schemas.android.com/apk/res/android& android:layout_width=&wrap_content& android:layout_height=&wrap_content& android:background=&#FFFFFF00&/&
MyView.java package com.example.dsliang.import android.content.Cimport android.util.AttributeSimport android.util.Limport android.view.V/** * Created by dsliang on . */public class MyView extends View { static final String TAG = MyView.class.getSimpleName(); public MyView(Context context) { super(context); Log.d(TAG, &ViewDemo(1)&); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); Log.d(TAG, &ViewDemo(2)&); }}
MainActivity.java import android.support.v7.app.AppCompatApublic class MainActivity extends AppCompatActivity { private static final String TAG = MainActivity.class.getSimpleName(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}
(Logcat可以看到是调用了C2)
就简单几句代码已经实现了自定义View了!是不是觉得自定义View也不就那样了?接下来是本章的最后一个内容,怎么自定义属性.
怎么自定义属性
我们自定义View在很多时候都需要自定义一些属于此View的一些属性.用一个简单笼统的理解.怎么把布局文件里面使用的属性传递到代码里面.这就是自定义属性所使用的场景.
在这里提出一个场景:在布局文件使用我们的自定义View.并且通过debug_text属性传递一句话,在自定义View里面获取debug_text并且通过Logcat输出相应的文本.
在布局文件里面不是想使用debug_text就能使用,必须先定义以后才能使用. 定义属性步骤: 1.在values包下新建attrs.xml文件 2.定义相应的属性 如:
attrs.xml &?xml version=&1.0& encoding=&utf-8&?&&resources& &declare-styleable name=&MyView&& &attr name=&debug_text& format=&string& /& &/declare-styleable&&/resources&
接下来我们就可以在自定义View里面使用我们已经定义的属性.
已经定义属性以后使用属性是很简单的事情. 1.添加xml命名空间 2.通过相应的命名空间使用属性 &?xml version=&1.0& encoding=&utf-8&?&&com.example.dsliang.viewdemo.MyView xmlns:android=&http://schemas.android.com/apk/res/android& xmlns:app=&http://schemas.android.com/apk/res-auto/com.example.dsliang.viewdemo& &!--app 是可以随意命名的--& &!--http://schemas.android.com/apk/res-auto/com.example.dsliang.viewdemo 格式是固定的--& &!--http://schemas.android.com/apk/res-auto/ 加包名--& android:layout_width=&wrap_content& android:layout_height=&wrap_content& android:background=&#FFFFFF00& &!-- 引用自定义属性 --& app:debug_text=&hello,,MyView& /&
到最后一步了.这里是介绍怎么在MyView代码里面获取在布局文件定义的属性.不知道你激动不激动,反正我现在是很激动!
首先必须知道我们必须在C2里面获取布局文件传递进来的属性. 这里就通过贴出代码并且在代码里面添加注解的方式解说.
MyView.java部分代码 public MyView(Context context, AttributeSet attrs) { super(context, attrs); Log.d(TAG, &ViewDemo(2)&); //通过attrs,R.styleable.MyView获取一个TypedArray实实例 //TypedArray实例里面已经存放好我们需要或许的属性了 TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyView); //使用R.styleable.MyView_debug_text索引我们需要的属性 String debugText = a.getString(R.styleable.MyView_debug_text); //释放TypedArray实例,使用完必须释放 a.recycle(); Log.d(TAG, &debug_text: & + debugText); }
到此自定义View的构造函数和自定义属性基本用法都介绍了一遍.当然是本着点到即止的宗旨出发.然后发现一个细节吗?我么MyView的witdh和height属性均为wrap_content,但是Demo确实填充整个父布局了.当然这一个问题就是下一篇要详尽介绍的onMeasure方法了. 注意:例子都是很简单的例子,只是希望能把问题说清楚.
attr属性 http://blog.csdn.net/dalancon/article/details/9701855 View http://android.xsoftlab.net/reference/android/view/View.html
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
为您提供0门槛上云实践机会
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
自定义View系列一 自定义View的构造函数,自定义属性相关信息,包括
的信息,所有自定义View系列一 自定义View的构造函数,自定义属性相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
服务与支持
账号与支持
关注阿里云
InternationalAndroid 自定义 View 浅析
说到自定义 View ,就一定得说说 android 系统的UI绘制流程。再说这个流程之前,我们先看一下在每一个 activity 页面中我们的布局 ui 所处的位置。
从上图就可以知道,我们平时使用的 setContentView() 这个方法就是用来设置 contentview 的。了解了,这个之后,我们还应该了解一下 android 中 view 的继承关系。
从上面的一张图中,我们可以看出 android 的 UI 控件主要有两种:view 和 viewgroup。那么像我们经常使用的 Button,TextView,ImageView 都属于 view 的范畴!FrameLayout,LinearLayout等都属于 viewgroup 的范畴!了解了这些基本知识之后,我们再来说说如果自定义控件!
如何自定义
我们要自定义控件,无非就是继承 view 或者 viewgroup 亦或者继承已有的控件在上面在进行扩展!在这里继承 view 和 继承 viewgroup 有点区别!我们先来说说相同点吧!
这个其实就是构造函数啦,在这里你可以为这个 view 设置特定的属性啊!那么如何自定义属性呢?首先你得在 res --&
values 这个目录下新建 attrs 的资源文件!在这个文件中配置你要的自定义属性!先看一下代码
&?xml version=&1.0& encoding=&utf-8&?&
&resources&
&declare-styleable name=&WeekSelectView&&
&attr name=&selectColor& format=&color&&&/attr&
&attr name=&unSelectColor& format=&color&&&/attr&
&attr name=&lineColor& format=&color&&&/attr&
&attr name=&textColor& format=&color&&&/attr&
&attr name=&textSize& format=&dimension&&&/attr&
&attr name=&selectSize& format=&dimension&&&/attr&
&attr name=&lineWidth& format=&dimension&&&/attr&
&attr name=&lineHeight& format=&dimension&&&/attr&
&attr name=&space& format=&dimension&&&/attr&
&/declare-styleable&
&/resources&
其中的 declare-styleable 标签就是添加自定义属性用的,里面包含的每一个 attr 就代表每一个自定义属性!后天面的 format 属性代表每一个属性的类型!接着就是我该如何使用它们呢!我们只要在布局文件中使用代码就行了:
&com.kidbot.library.widget.weekselect.WeekSelectView
xmlns:weekselect=&http://schemas.android.com/apk/res-auto&
android:id=&@+id/weekselect&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:layout_marginTop=&20dp&
weekselect:lineHeight=&10dp&
weekselect:lineWidth=&50dp&
weekselect:selectSize=&10dp&
weekselect:space=&30dp&
weekselect:textSize=&15sp& /&
要注意的是如果要在布局文件中使用这些自定义属性得加这句话: xmlns:weekselect=&& 其中 weekselect 这个字段属于用户自定义!
好了知道如何使用了,那么在写自定义 view 的时候,我们该怎么获取这些这些值呢?
TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.WeekSelectView);
selectColor=typedArray.getColor(R.styleable.WeekSelectView_selectColor, Defalut_Select_Color);
unSelectColor=typedArray.getColor(R.styleable.WeekSelectView_unSelectColor, Defalut_UnSelect_Color);
lineColor=typedArray.getColor(R.styleable.WeekSelectView_lineColor, Defalut_Line_Color);
textSize = typedArray.getDimension(R.styleable.WeekSelectView_textSize, Defalut_Text_Size);
textColor = typedArray.getColor(R.styleable.WeekSelectView_textColor, Defalut_Text_Color);
selectSize = typedArray.getDimension(R.styleable.WeekSelectView_selectSize, Defalut_Select_Size);
lineHeight = typedArray.getDimension(R.styleable.WeekSelectView_lineHeight, Defalut_Line_Height);
lineWidth=typedArray.getDimension(R.styleable.WeekSelectView_lineWidth, Defalut_Line_Width);
space=typedArray.getDimension(R.styleable.WeekSelectView_space,Defalut_Space);
typedArray.recycle();
代码比较简单,我就不详细说了,唯一要注意的就是不要忘了释放这个资源。
2. 计算大小
好了,当我们获取到了 view 的一些初始化值之后呢,我们得计算我们的 view 的大小了!那怎么计算 view 的大小呢?只要覆写 onMeasure(int widthMeasureSpec, int heightMeasureSpec) 这个方法就行了。但在覆写这个方法之前,我们先得了解几个方法
MeasureSpec.getSize(int value) 这个方法是用来获取对应的宽高的!
MeasureSpec.getMode(int value) 这个方法是用来获取对应的宽高的模式的!这了模式有这个三个:
MeasureSpec.EXACTLY
精确值模式,当layout_width或layout_height指定为具体数值,或者为match_parent时,系统使用EXACTLY
MeasureSpec.AT_MOST
最大值模式,指定为wrap_content时,控件的尺寸不能超过父控件允许的最大尺寸
MeasureSpec.UNSPECIFIED
不指定测量模式,View想多大就多大,一般不太使用
这个给出常用的覆写这个方法的代码:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSize=MeasureSpec.getSize(widthMeasureSpec);
int widthMode=MeasureSpec.getMode(widthMeasureSpec);
int heightSize=MeasureSpec.getSize(heightMeasureSpec);
int heightMode=MeasureSpec.getMode(heightMeasureSpec);
if (widthMode==MeasureSpec.EXACTLY){
width=widthS
lineWidth=(width-itemlength*selectSize-getPaddingRight()-getPaddingLeft()-
textRect.width())/(itemlength-1);
width= (int) (selectSize*(itemlength)+lineWidth*(itemlength-1)+textRect.width());
if (heightMode==MeasureSpec.EXACTLY){
height=heightS
height= (int) (selectSize+space+textRect.height()+paddingTop);
setMeasuredDimension(width, height);
一般而言,当用户设置了具体的宽高的时候,我们使用设置的,如果没有,我们自己计算对应的宽高,最后设置!当完成这一步之后,我么就可以使用 getMeasuredWidth(),getMeasuredHeight() 这两个方法来获取 view 对应的高度了!
好了,到了这一步,我们只要覆写 onDraw(Canvas canvas) 这个方法就行了,至于要绘制什么,这个是由开发者自己决定的。这里大家住一个问题,就是不要在方法中创建类,要不然会非常的耗资源!!如果大家想绘制出非常炫酷的图形或者效果来,那就得去学学 Canvas 这个类了!!这里给个链接
这里我要说的不同点就是如果继承了 viewgroup 之后,要多覆写一个方法 onLayout() 这个方法就是用来设置子view的位置的!
现在只有你覆写了这个方法之后 ,getHeight() 和getWidth() 才能获取到对应的值!现在可能有读者要问了,这两个方法和上面的 getMeasuredWidth(),getMeasuredHeight() 这两个方法有什么区别?却别就是
getHeight : 就是当前view中的可视高度
getMeasuredHeight:就是view的内容高度,包括不可见的地方
其他要到说的
自定义view 还有一个比较重要的问题,就是触摸事件,就是 touch 事件 在这个要涉及的问题就是 android 中触摸事件的传递机制了,这个也给个链接
如果触摸相关的已经学习好了,就可以在学习一下 android 动画的相关知识了,毕竟动态的事物比静态的要吸引人啊!这个在给出
希望大家都能学会 android 自定义 view 这个看似高大上的技能,因为这个在 android 开发中太常用了!!!!
阅读(...) 评论()

我要回帖

更多关于 js获取自定义属性的值 的文章

 

随机推荐