该实例是在自定义View上使用自定义属性的。
先来看看源码:MyView.java
Code:
package com.adnroid.test;
import com.adnroid.test.R;
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 myPaint;
private static final String myString = "Welcome to our Zoon!";
public MyView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public MyView(Context context, AttributeSet attr) {
super(context, attr);
myPaint = new Paint();
TypedArray a = context.obtainStyledAttributes(attr, R.styleable.myView);//TypedArray是一个数组容器
float textSize = a.getDimension(R.styleable.myView_textSize, 30);//防止在XML文件里没有定义,就加上了默认值30
int textColor = a.getColor(R.styleable.myView_textColor, 0xFFFFFFFF);//同上,这里的属性是:名字_属性名
myPaint.setTextSize(textSize);
myPaint.setColor(textColor);
a.recycle();//我的理解是:返回以前取回的属性,供以后使用。以前取回的可能就是textSize和textColor初始化的那段
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
//myPaint = new Paint();
myPaint.setColor(Color.RED);
myPaint.setStyle(Style.FILL);
canvas.drawRect(new Rect(10,10,100,100), myPaint);
myPaint.setColor(Color.WHITE);
canvas.drawText(myString, 10, 100, myPaint);
}
}
attrs.xml
Code:
<?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>
main.xml
Code:
<?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.adnroid.test"
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.adnroid.test.MyView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
test:textSize="10px"
test:textColor="#fff"
/>
</LinearLayout>
最终的效果
分享到:
相关推荐
Android中自定义属性attrs.xml、TypedArray的使用,只是做的一个示例,不喜勿喷
Android自定义View中attrs.xml的实例详解 我们在自定义View的时候通常需要先完成attrs.xml文件 在values中定义一个attrs.xml 然后添加相关属性 这一篇先详细介绍一下attrs.xml的属性。 <?xml version=1.0 ...
测试:Android 中自定义属性(attr.xml,TypedArray)的使用 注意:MyView(Context context,AttributeSet attrs)构造函数的实现, 和注意main.xml的LinearLayout 里加的声明 要了解:test:textSize="20px" test:...
解决error: No resource identifier found for attribute 'cardCornerRadius' in package 'com.example.test' android\sdk\extras\android\support\v7\cardview\res\values\attrs.xml 把这个拷贝到工程目录下就有了
Android自定义控件的使用与自定义控件中使用自定义attrs.xml属性标签
asm-attrs.jar asm-attrs.jar asm-attrs.jar
首先创建values\attrs.xml,在attrs.xml中声明自定义属性: 自定义string类型,属性名为text 自定义color类型,属性名为textColor 自定义dimension类型,属性名为textSize declare-styleable这个标签的作用其实...
标签:asm-attrs.jar.zip,asm,attrs,jar.zip包下载,依赖包
主要为大家介绍了android自定义控件属性TypedArray以及attrs,感兴趣的小伙伴们可以参考一下
(2)attrs.xml 文件只做属性的描述 步骤2:写自定义类 步骤3:使用自定义组件、自定义属性 三、效果展示-简单小结 1、效果展示 2、执行流程 3、可以不写 attrs.xml 文件 4、问题 四、把代码移植到 Android Studio中...
Android夜间模式,通过Theme实现(attrs.xml styles.xml Activity.setTheme()) 效果展示: 如何添加 Gradle添加: 1.在Project的build.gradle中添加仓库地址 allprojects { repositories { ... maven { url ...
1、attrs.xml 文件介绍 2、attrs.xml 文件具体写法 3、attrs.xml 文件解释 一、前言 最近项目中用到很多自定义组件的知识,所以想把几年前自学自定义组件的笔记整理一下和大家一起分享,也方便自己巩固。之后也会...
从 Android attrs XML 生成 Java 枚举类介绍(和警告) 这是一个黑客。 而已。 我敢肯定,拥有比我更多 Gradle 技能的人可能可以将它变成一个合适的插件,但是如果你需要一些快速而肮脏的东西,试试这个……但如果它...
前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些...1.)在res/values文件下添加一个attrs.xml文件,如果项目比较大的话,会导致attrs.xml代码相当庞大,这时可
编写values/attrs.xml,在其中编写styleable和item等标签元素 在布局文件中CustomView使用自定义的属性(注意namespace) 在CustomView的构造方法中通过TypedArray获取 ps:如果你对上述几个步骤不熟悉,建议先...
自定义view起步 1,新建attrs.xml文件,增加declare-styleable 2,实现android.view.View 3,在layout.xml 使用自定义view