关于自定义控件之自定义属性篇

来源:互联网 发布:tensorflow spark 编辑:程序博客网 时间:2024/06/13 07:39

  有些时候,我们自定义某个控件,需要为改控件添加一些自定义的属性时,可以分为以下步骤

一、

 1.在res下新建attr目录,并且在该目录下新建自定义的xml文件

<?xml version="1.0" encoding="utf-8"?><resources>    <declare-styleable name="MyView">        <attr name="ViewHeight" format="dimension"></attr>        <attr name="ViewWidth" format="dimension"></attr>    </declare-styleable></resources>

 2.在控件所在的布局文件的最外层的布局中声明自定义属性空间

xmlns:app = "http://schemas.android.com/apk/res-auto"
其中的“app”,可以自行定义


 3.在自定义控件中使用自定义的属性

<admin.example.com.canvasandpaintandpathtest.MyView        android:layout_height="wrap_content"        android:layout_width="wrap_content"        app:ViewHeight="3.5dp"        app:ViewWidth="3.5dp"/>
以上就是自定义属性的步骤了。

二、关于自定义属性详解

《Android 深入理解Android中的自定义属性》

三、拓展

在自定义View的构造方法中使用TypedArray去获取View的属性时,发现设置上面的3.5dp,

float width = typedArray.getDimension(R.styleable.MyView_ViewWidth,0);        float height = typedArray.getDimension(R.styleable.MyView_ViewHeight,0);        Log.i("MYVIEWDATA ","宽度为:"+width);        Log.i("MYVIEWDATA ","高度为:"+height);
日志打出的是10.5。


原因是因为屏幕密度不一样导致,这里的测试手机屏幕密度为480,所以这里打印出的日志结果,实际上是屏幕scale = 3 乘 3.5,最终为10.5

具体可以参考

《getDimension与getDimensionPixelOffset与getDimensionPixelSize的区别》




0 0
原创粉丝点击