declare-styleable使用

declare-styleable使用declare-styleable是给自定义控件添加自定义属性用的attr中在attrs.xml中设置declare-styleable,name是PersonAttr<?xmlversion=”1.0″encoding=”utf-8″?><resources><declare-styleablename=”PersonAttr”><attrname=”name”format=”reference”/&gt

大家好,又见面了,我是你们的朋友全栈君。

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

attr中

在attrs.xml中设置declare-styleable,name是PersonAttr

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <declare-styleable name="PersonAttr">  
        <attr name="name" format="reference" />  
        <attr name="age" format="integer" />  
        <attr name="weight">  
            <flag name="fat" value="2" />  
            <flag name="mid" value="1" />  
            <flag name="thin" value="0" />  
        </attr>  
        <attr name="adult" format="boolean" />  
        <attr name="textSize" format="dimension" />  
    </declare-styleable>  
</resources> 

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

  1. reference:参考某一资源ID,以此类推
    属性定义:
<declare-styleable name = "名称">
	<attr name = "background" format = "reference" />
</declare-styleable>

属性使用:

<ImageView
	android:layout_width = "42dip"
	android:layout_height = "42dip"
	android:background = "@drawable/图片ID"
	/>
  1. color:颜色值
  2. boolean:布尔值
  3. dimension:尺寸值。注意,这里是像素
  4. float:浮点值
  5. integer:整型值
  6. string:字符串
  7. fraction:百分数
  8. enum:枚举值
  9. flag:是自己定义的
  10. reference|color:颜色的资源文件
  11. reference|boolean:布尔值的资源文件

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

自定义View中

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import androidx.appcompat.widget.AppCompatTextView;
public class PersonView extends AppCompatTextView { 

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);
int age = tArray.getInt(R.styleable.PersonAttr_age, 15);
int weight = tArray.getInt(R.styleable.PersonAttr_weight, 1);// 默认是中等身材,属性为:1
String str_weight = getWeightStatus(weight);//获得肥胖属性
Boolean adult = tArray.getBoolean(R.styleable.PersonAttr_adult, false);
String str_adult = getAdultStatus(adult);
float textSize = tArray.getDimension(R.styleable.PersonAttr_textSize, 15);
setTextSize(textSize);//设置字体大小
tArray.recycle();//回收资源
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;
}
}

xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:personattr="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.xx.testapplication.PersonView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
personattr:adult="false"
personattr:name="@string/person_name"
personattr:weight="thin" 
personattr:textSize="15px"/>
</LinearLayout>

注意根布局增加的

xmlns:personattr="http://schemas.android.com/apk/res-auto"

结构是

xmlns:xml中使用的属性前缀="http://schemas.android.com/apk/res-auto"

结果
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158524.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • python计算基尼系数_PHP算法

    python计算基尼系数_PHP算法什么是基尼系数基尼系数是指国际上通用的、用以衡量一个国家或地区居民收入差距的常用指标。是20世纪初意大利经济学家基尼,于1922年提出的定量测定收入分配差异程度的指标。它是根据洛伦兹曲线找出了判断分配平等程度的指标(如下图)。设实际收入分配曲线和收入分配绝对平等曲线之间的面积为A,实际收入分配曲线右下方的面积为B。并以A除以A+B的商表示不平等程度。这个数值被称为基尼系数或称洛伦茨系…

  • mybaits入门(含实例教程和源码)

    mybaits入门(含实例教程和源码)

    2020年11月12日
  • 如何给女朋友做个树莓派复古相机?[通俗易懂]

    如何给女朋友做个树莓派复古相机?[通俗易懂]本文转载自程序员极客实验室手机拍照不够爽,带个单反又太重?试试做个树莓派复古相机,还能自己编写处理算法的那种——成本不到700元。没错,颜值很高,拍出来的照片也能打:你也可以快速上手做一个。如何制作一个树莓派复古相机目前,这部相机的代码、硬件清单、STL文件(用于3D打印)和电路图都已经开源。首先是硬件部分。这部复古相机的硬件清单如下:树莓派ZeroW(搭配microSD卡)、树莓派高清镜头模组、16mm1000万像素长焦镜头、2.2英寸TFT显

  • 2021年汽车修理工(初级)报名考试及汽车修理工(初级)最新解析「建议收藏」

    2021年汽车修理工(初级)报名考试及汽车修理工(初级)最新解析「建议收藏」题库来源:安全生产模拟考试一点通公众号小程序安全生产模拟考试一点通:美容师(技师)试题及解析参考答案及美容师(技师)考试试题解析是安全生产模拟考试一点通题库老师及美容师(技师)操作证已考过的学员汇总,相对有效帮助美容师(技师)复审考试学员题库来源:安全生产模拟考试一点通公众号小程序安全生产模拟考试一点通:质量员-市政方向-通用基础(质量员)考试题是安全生产模拟考试一点通总题库中生成的一套质量员-市政方向-通用基础(质量员)免费试题,安全生产模拟考试一点通上质量员-市政方向-通用基础(质量员)作业手机同步

  • j2me开发环境搭建[通俗易懂]

    j2me开发环境搭建[通俗易懂]学习j2me的开发也有半年了,很多东西需要记住并不断实践。 j2me的环境搭建过程。 要准备的东东:1.JDK;2.开发工具Eclipse;3.eclipseMe;4.WTK;   一、下载jdk,并安装,安装好后配置环境变量,假设现在jdk的安装目录是E:/ProgramFiles/Java/jdk1.6.0_10,那么按如下配置环境变量:

  • [Dreamweaver教程]Meta标签详解「建议收藏」

    [Dreamweaver教程]Meta标签详解「建议收藏」[Dreamweaver教程]Meta标签详解原作者:indian出处:5D多媒体发表时间:2004-12-8关键词:版权信息:传统媒体及商业网站禁止擅自转载;个人网站转载需经作者同意,并注明作者及出处。