`

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

 
阅读更多
一、 在res/values 文件下定义一个attrs.xml 文件.代码如下:



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

二、 我们在MyView.java 代码编写如下,其中下面的构造方法是重点,我们获取定义的属性R.sytleable.MyView_textColor, 获取方法中后面通常设定默认值(float textSize = a.getDimension(R.styleable.MyView_textSize, 36 ); ), 防止我们在xml 文件中没有定义.从而使用默认值!

MyView 就是定义在<declare-styleable name="MyView "></declare-styleable> 里的 名字,获取里面属性用 名字_ 属性 连接起来就可以.TypedArray 通常最后调用 .recycle() 方法,为了保持以后使用该属性一致性!



    public MyView(Context context,AttributeSet attrs) 
        { 
            super(context,attrs); 
            mPaint = new Paint(); 
             
            TypedArray a = context.obtainStyledAttributes(attrs, 
                    R.styleable.MyView); 
             
            int textColor = a.getColor(R.styleable.MyView_textColor, 
                    0XFFFFFFFF); 
            float textSize = a.getDimension(R.styleable.MyView_textSize, 36); 
             
            mPaint.setTextSize(textSize); 
            mPaint.setColor(textColor); 
             
            a.recycle(); 
        } 

MyView.java  MyView控件全部代码如下:



    package com.android.tutor; 
    import android.content.Context; 
    import android.content.res.TypedArray; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.graphics.Rect; 
    import android.graphics.Paint.Style; 
    import android.util.AttributeSet; 
    import android.view.View; 
    public class MyView extends View { 
        private Paint mPaint; 
        private Context mContext; 
        private static final String mString = "Welcome to Mr Wei's blog"; 
         
        public MyView(Context context) { 
            super(context); 
            mPaint = new Paint(); 
        } 
        public MyView(Context context,AttributeSet attrs) 
        { 
            super(context,attrs); 
            mPaint = new Paint(); 
             
            TypedArray a = context.obtainStyledAttributes(attrs, 
                    R.styleable.MyView); 
             
            int textColor = a.getColor(R.styleable.MyView_textColor, 
                    0XFFFFFFFF); 
            float textSize = a.getDimension(R.styleable.MyView_textSize, 36); 
             
            mPaint.setTextSize(textSize); 
            mPaint.setColor(textColor); 
             
            a.recycle(); 
        } 
        @Override 
        protected void onDraw(Canvas canvas) { 
            // TODO Auto-generated method stub 
            super.onDraw(canvas); 
            //设置填充 
            mPaint.setStyle(Style.FILL); 
             
            //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标 
            canvas.drawRect(new Rect(10, 10, 100, 100), mPaint); 
             
            mPaint.setColor(Color.BLUE); 
            //绘制文字 
            canvas.drawText(mString, 10, 110, mPaint); 
        } 
    } 

三、将我们自定义的MyView 加入布局main.xml 文件中,并且使用自定义属性,自定义属性必须加上:

    " xmlns:test ="http://schemas.android.com/apk/res/com.android.tutor"  ,test是自定义属性的前缀,           com.android.tutor 是我们包名.



main.xml 全部代码如下:



    <?xml  
    version="1.0" encoding="utf-8"?> 
    <LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android" 
                   
    xmlns:test="http://schemas.android.com/apk/res/com.android.tutor" 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        > 
    <TextView   
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="@string/hello" 
        /> 
    <com.android.tutor.MyView 
        android:layout_width="fill_parent"  
        android:layout_height="fill_parent"  
        test:textSize="20px" 
        test:textColor="#fff" 
    /> 
    </LinearLayout> 
分享到:
评论

相关推荐

    Aj_03的Android 中自定义属性(attr.xml,TypedArray)的使用(源码)

    测试:Android 中自定义属性(attr.xml,TypedArray)的使用 注意:MyView(Context context,AttributeSet attrs)构造函数的实现, 和注意main.xml的LinearLayout 里加的声明 要了解:test:textSize="20px" test:...

    Android 中自定义属性(attr.xml,TypedArray)的使用

    NULL 博文链接:https://elingwange.iteye.com/blog/1285289

    Android中自定义控件的declare-styleable属性重用方案

    最近接触了Android自定义控件,涉及到自定义xml中得属性(attribute),其实也很简单,但是写着写着,发现代码不完美了,就是在attrs.xml这个文件中,发现属性冗余,于是就想有没有类似属性继承或者include之类的方法....

    详解Android自定义控件属性

    在Android开发中,往往要用到自定义的控件来实现我们的需求或效果。在使用自定义 控件时,难免要用到自定义属性,那怎么使用自定义属性呢? 在文件res/values/下新建attrs.xml属性文件,中定义我们所需要的属性。 ...

    Android高手进阶教程与Android基础教程

    Android高手进阶教程之----Android 中自定义属性(attr.xml,TypedArray)的使用! .doc Android高手进阶教程之----Android中万能的BaseAdapter(Spinner,ListView,GridView)的使用!.doc Android高手进阶教程之----通过...

    Android自定义Attr属性

    Android自定义Attr属性 的具体使用例子,看完之后,你就知道如何自定义控件的属性

    CircularProgress-一个模仿android L中载入视图的控件.zip

    一个模仿android L中载入视图的控件。可自定义控件的颜色、边框长度、动画时间。项目地址:https://github.com/dodocat/CircularProgress 效果图:如何使用&lt;org.quanqi.circularprogress.CircularProgressView  ...

    Android雷达图(蜘蛛网图)源码

    需要在res/values/attrs.xml中添加以下 &lt;declare-styleable name="MyNetPic"&gt; &lt;attr name="lineColor" format="color"/&gt;&lt;!-- 线的颜色 --&gt; &lt;attr name="cotentColor" format="color"/&gt;&lt;!-- 图形的颜色 --&gt; &lt;attr...

    Android自定义聊天气泡形状ImageView.rar

    Android自定义聊天气泡形状ImageView可设置箭头位置(左或右),图片圆角大小(属性在自定义attr.xml里面)

    仿qq侧滑代码

    3 在res/values/新建attr.xml,并添加如下代码 &lt;attr name="rightPadding" format="dimension"&gt;&lt;/attr&gt; &lt;declare-styleable name="MyLeftContent"&gt; &lt;attr name="rightPadding"&gt;&lt;/attr&gt; &lt;/declare-styleable&gt; ...

    GifImageView.java

    attrs.xml 属性: &lt;declare-styleable name="GifImageView"&gt; &lt;!--gif文件引用--&gt; &lt;attr name="gif_src" format="reference" /&gt; &lt;!--是否加载完自动播放--&gt; &lt;attr name="auth_play" format="boolean" /&gt; &lt;!--...

    Android自定义View中attrs.xml的实例详解

    Android自定义View中attrs.xml的实例详解 我们在自定义View的时候通常需要先完成attrs.xml文件 在values中定义一个attrs.xml 然后添加相关属性 这一篇先详细介绍一下attrs.xml的属性。 &lt;?xml version=1.0 ...

    RainyView-Android 自定义View之下雨动画 效果.zip

    画雨滴首先我们要知道一点是,所有的雨滴都是随机产生的,而产生的值,可以根据上面的自定义属性指定,也可以使用自定义的值,我们先定义一个雨滴类private class RainDrop{  float speedX; //雨滴x轴移动速度 ...

    NCURSES-Programming 文档示例程序

    |----&gt; form_win.c -- 一个简单的窗口和表单联合使用的例子 menus | |----&gt; menu_attrib.c -- 展示菜单属性的用法 |----&gt; menu_item_data.c -- 展示 item_name() 等等函数的用法 |----&gt; menu_multi_column.c...

    lottie-2.7.0.jar

    在assets文件夹下放images+json文件就可以动态生成gif的android lottie jar包,需要在自己工程里面的values/attrs.xml加上自定义属性 &lt;declare-styleable name="LottieAnimationView"&gt; &lt;attr name="lottie_fileName...

    Android代码-MultipleTheme

    真正的支持无缝换肤/夜间模式的Android框架,配合theme和换肤控件框架可以做到无缝切换换肤(无需重启应用和当前页面)。 该应用框架可以实现无缝换肤/切换夜间模式的需求,需要在换肤/切换夜间模式的界面只需要...

    linux集群基础细分视频.zip

    目录 01复习基础命令.a ...14-1attr权限 14-2根目录下每个文件的作用a 15.16sudo授权5.16.at 17-1文件系统介绍am 17-2硬链接 18查找(1) 19-1查找(2) 19-2查找(3) 20-1zip压缩 ...................

    Android-ImageView-hover:自定义 ImageView,在 ImageView 的属性中设置悬停效果

    自定义图像视图, 在 ImageView 的属性中设置悬停效果。 第 1 步:声明样式(my_styles.xml) &lt; declare xss=removed&gt; &lt; attr xss=removed xss=removed&gt; &lt; /declare-styleable &gt; 第 2 步:自定义 ImageView...

    详解Android自定义控件属性TypedArray以及attrs

    最近在研究android自定义控件属性,学到了TypedArray以及attrs。大家也可以结合《理解Android中的自定义属性》这篇文章进行学习,后续一篇还有应用。 1、attrs文件编写 &lt;?xml version=1.0 encoding=utf-8?&gt; ...

    Android自定义控件深入学习 Android生成随机验证码

    在上一篇的文章中介绍了自定义控件的属性,详情见《详解Android自定义控件属性TypedArray以及attrs》。那么在这基础上实现随机验证码生成,里面的代码是自定义控件以及涉及到自定义view绘画。 1、先看实现的效果图 ...

Global site tag (gtag.js) - Google Analytics