zoukankan      html  css  js  c++  java
  • android自定义控件及属性

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

    <?xml version="1.0" encoding="utf-8"?>

    <resources>

        <declare-styleable name="MyView">

            <attr name="txtColor" format="color" />

            <attr name="txtSize" format="dimension" />

        </declare-styleable>

    </resources>

     

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

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

    MyView.java 全部代码如下:

    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 txtColor = a.getColor(R.styleable.MyView_txtColor,   

                    0XFFFFFFFF);   

            float txtSize = a.getDimension(R.styleable.MyView_txtSize, 36);   

               

            mPaint.setTextSize(txtSize);   

            mPaint.setColor(txtColor);   

               

            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 文件中。

    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:txtSize="20px"  

        test:txtColor="#fff"  

    />   

    </LinearLayout> 

  • 相关阅读:
    表示数值的字符串(C++描述)
    单链表是否有环及环入口点
    医院信息运维系统-信息科专用运维系统
    c# List 按类的指定字段排序
    运维系统说明
    更新库下载
    mysql数据库备份
    网络编程基础
    面向对象和过程,一样的价格,不一样的口味
    模块的导入顺序细节
  • 原文地址:https://www.cnblogs.com/fx2008/p/3133231.html
Copyright © 2011-2022 走看看