首先我们要在values文件夹下创建一个attrs的xml在attrs里面写入自己的自定义属性
<attr name="titleText" format="string" /><attr name="titleTextColor" format="color" /><attr name="titleTextSize" format="dimension" /><declare-styleable name="CustomTitleView"> <attr name="titleText" /> <attr name="titleTextColor" /> <attr name="titleTextSize" /></declare-styleable>然后在布局文件中引用我们的自定义属性<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:custom="http://schemas.android.com/apk/res-auto" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.bawei.lianxi.MainActivity"> <com.szg.lianxi.MyView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" custom:titleText="3712" custom:titleTextColor="#ff0000" custom:titleTextSize="40sp" /></RelativeLayout>新建一个类继承View并重写View的方法package com.bawei.lianxi;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.util.AttributeSet;import android.util.TypedValue;import android.view.View;/** * Created by 宋泽港 on 2017/2/8. */public class MyView extends View{ /** * 绘制文本的范围 */ PRivate Rect mBound; private Paint mPaint; //文本颜色 private int mTitleTextColor; //文本大小 private int mTitleTextSize; //文本 private String mTitleText; public MyView(Context context) { this(context,null); } public MyView(Context context, AttributeSet attrs) { this(context, attrs,0); } public MyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); //获得我们所定义的自定义属性 mPaint=new Paint(); TypedArray a=context.obtainStyledAttributes(attrs,R.styleable.CustomTitleView,defStyleAttr,0); int n=a.getIndexCount(); for (int i=0;i<n;i++){ int attr=a.getIndex(i); switch (attr){ case R.styleable.CustomTitleView_titleText: mTitleText=a.getString(attr); break; //设置默认颜色 case R.styleable.CustomTitleView_titleTextColor: mTitleTextColor=a.getColor(attr,Color.RED); break; case R.styleable.CustomTitleView_titleTextSize: mTitleTextSize=a.getDimensionPixelSize(attr, (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,16,getResources().getDisplayMetrics()) ); break; } } //释放资源 a.recycle(); /** * 绘制文本的宽和高 */ mPaint.setTextSize(mTitleTextSize); mBound=new Rect(); mPaint.getTextBounds(mTitleText,0,mTitleText.length(),mBound); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } //画布 @Override protected void onDraw(Canvas canvas) { mPaint.setColor(Color.YELLOW);//设置画布的颜色 //绘制的位置 canvas.drawRect(0,0,getMeasuredWidth(),getMeasuredHeight(),mPaint); mPaint.setColor(mTitleTextColor); canvas.drawText(mTitleText, getWidth() / 2 - mBound.width() / 2, getHeight() / 2 + mBound.height() / 2, mPaint); super.onDraw(canvas); }}
新闻热点
疑难解答