`
1025250620
  • 浏览: 224668 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

    这里有很多自定义view可以参考思路思路比较简单,整个view无非两样东西云雨滴这里又包含两部分动画,一部分是云的左右移动动画,一部分是雨滴移动动画 那我们这里可以自定义一些属性,如果对自定义属性还不太了解的...

    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和换肤控件框架可以做到无缝切换换肤(无需重启应用和当前页面)。 该应用框架可以实现无缝换肤/切换夜间模式的需求,需要在换肤/切换夜间模式的界面只需要...

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

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

    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自定义控件深入学习 Android生成随机验证码

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

    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压缩 ...................

Global site tag (gtag.js) - Google Analytics