博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android-自定义控件及属性
阅读量:6896 次
发布时间:2019-06-27

本文共 2486 字,大约阅读时间需要 8 分钟。

一、在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> 

转载于:https://www.cnblogs.com/fx2008/archive/2013/06/12/3133231.html

你可能感兴趣的文章
textarea服务器控件
查看>>
找出给定字符串中出现最多的字符和次数
查看>>
jdbctempleate 执行postgres 数据库存储过程返回结果集
查看>>
数组排序希尔排序算法知识总结
查看>>
poj 1511 Invitation Cards
查看>>
微信-心跳机制
查看>>
元素和语义化
查看>>
把js写到链接a标签的href中和写到onclick中的区别
查看>>
[转]IOS多线程
查看>>
函数字符串C++的String类的字符串分割实现----(效果等于Java的String类的split函数)...
查看>>
OM Unit Cost <— Item Cost
查看>>
交通灯控制器的verilog实现
查看>>
MYSQL多库联合查询
查看>>
SYSTEM.NET.SOCKET命名空间之TCPCLIENT类和UDPCLIENT类
查看>>
PostgreSQL 使用 LDAP 认证方式
查看>>
委托事件和jquery中的delegate方法
查看>>
温针灸_百度百科
查看>>
全解析jQuery插件开发!很好很强大!
查看>>
【crunch bang】tint2配置2
查看>>
提高团队协作效率
查看>>