您的位置:首页 > 移动开发 > Android开发

Android 自定义控件——View(学习篇)

2016-06-24 10:10 357 查看
自定义View步骤:

1、自定义View的属性;

2、在构造方法中获取自己定义的属性;

3、重写onMesure();

4、重写onDraw();

学习小结:

一、declare-styleable:declare-styleable是给自定义控件添加自定义属性用的。

1.首先,先写attrs.xml

在res-vlaues文件夹下创建资源文件attrs.xml或则自定义一个资源文件xx.xml,都可以。

之后在里面配置declare-styleable ,name为PersonAttr。

/////////////////////

可能这里有人会问,format是什么,里面的单词代表的又是什么意思。

format就是格式,里面的就是这个属性对应的格式,下面列出来大致的格式有:

1. reference:参考某一资源ID,以此类推

(1)属性定义:

<declare-styleable name = "名称">

<attr name = "background" format = "reference" />

</declare-styleable>

(2)属性使用:

<ImageView

android:layout_width = "42dip"

android:layout_height = "42dip"

android:background = "@drawable/图片ID"

/>

2. color:颜色值

<declare-styleable name = "名称">

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

</declare-styleable>

3. boolean:布尔值

<declare-styleable name = "名称">

<attr name = "focusable" format = "boolean" />

</declare-styleable>

4. dimension:尺寸值。注意,这里如果是dp那就会做像素转换

<declare-styleable name = "名称">

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

</declare-styleable>

5. float:浮点值。

6. integer:整型值。

7. string:字符串

8. fraction:百分数。

9. enum:枚举值

10. flag:是自己定义的,类似于 android:gravity="top",就是里面对应了自己的属性值。

11. reference|color:颜色的资源文件。
12.reference|boolean:布尔值的资源文件

注意://由于reference是从资源文件中获取:所以在XML文件中写这个属性的时候必须 personattr:name="@string/app_name"这种格式,否则会出错

2.设置好属性文件后,在使用的布局中写相关配置:

xmlns:personattr="http://schemas.android.com/apk/res/com.example.declare_styleable"  

xmlns:你自己定义的名称="http://schemas.android.com/apk/res/你程序的package包名"    (我这是com.example.declare_styleable)
 

3.最后在自定义控件的构造方法中获取你配置的属性值:

public class PersonView extends TextView {
public PersonView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}

public PersonView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}

public PersonView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
TypedArray tArray = context.obtainStyledAttributes(attrs,R.styleable.PersonAttr);//获取配置属性
String name = tArray.getString(R.styleable.PersonAttr_name);<span style="font-family: Arial, Helvetica, sans-serif;">//得到属性name</span>
int age = tArray.getInt(R.styleable.PersonAttr_age, 15);
Boolean adult = tArray.getBoolean(R.styleable.PersonAttr_adult, false);
String str_adult = getAdultStatus(adult);
int weight = tArray.getInt(R.styleable.PersonAttr_weight, 1);// 默认是中等身材,属性为:1
String str_weight = getWeightStatus(weight);//获得肥胖属性
float textSize = tArray.getDimension(R.styleable.PersonAttr_textSize,R.dimen.default_text_size);// 如果你设置为DP等单位,会做像素转换
tArray.recycle();//回收资源
// setTextSize(textSize);//设置字体大小
setText("姓名:" + name + "\n" + "年龄:" + age + "\n" + "是否成年:" + str_adult
+ "\n" + "体形:" + str_weight);//给自定义的控件赋值
}

/** 根据传入的值判断是否成年 */
public String getAdultStatus(Boolean adult ){
String str_adult = "未成年";
if (adult) {
str_adult = "成年";
}
return str_adult;
}

/** 根据传入的值判断肥胖状态 */
public String getWeightStatus(int weight){
String str_weight = "中等";
switch (weight) {
case 0:
str_weight = "瘦";
break;
case 1:
str_weight = "中等";
break;
case 2:
str_weight = "肥胖";
break;
default:
break;
}
return str_weight;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: