attrs.xml中declare-styleable 详解(用于自定义控件的属性)

2023-10-27

 

1. 框架定义:

<declare-styleable name = "名称">

  <attr name = "……" format = "……" />

</declare-styleable>

 

2. color:颜色值,指定这个属性必须输入的是颜色值

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

 

3. boolean:布尔值,指定这个属性必须输入的是boolean类型(true/false)

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

 

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

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

 

5. float:浮点值。

<attr name="degree" format="float"></attr> 

 

6. integer:整型值。

<attr name="startAngle" format="integer"></attr> 

 

7. string:字符串

<attr name="text" format="string"></attr> 

 

8. fraction:百分数。使用: android:pivotY = "300%" 

<attr name = "pivotY" format = "fraction" />

 

9. enum:枚举值,设置这个属性必须输入的值。比如style类型,就只能输入STROKE/FILL。在于代码链接的过程中就是传0/1

<attr name="style">
  <enum name="STROKE" value="0"></enum>
  <enum name="FILL" value="1"></enum>
</attr>

 

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

 <attr name="weight">              

  <flag name="fat" value="0" />             

   <flag name="mid" value="1" />              

  <flag name="thin" value="2" />          

</attr>  

 

11. reference|color:颜色的资源文件。

12.reference|boolean:布尔值的资源文件

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

 

     属性定义时可以指定多种类型值。

    (1)属性定义:

            <declare-styleable name = "名称">

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

            </declare-styleable>

    (2)属性使用:

             <ImageView

                     android:layout_width = "42dip"
                     android:layout_height = "42dip"
                     android:background = "@drawable/图片ID|#00FF00" />

 

下面将代码和定义的xml文件联系起来

TypedArray tArray = context.obtainStyledAttributes(attrs,R.styleable.PersonAttr);//获取配置属性  

自定义变量age,通过TypedArray 对象来获取xml中国的值。如果用户在使用该控件的时候有定义age属性的值,那么就得到用户定义的值,否则就用第二个参数作为默认值,即:如果没定义,那么默认为age = 15

int age = tArray.getInt(R.styleable.PersonAttr_age, 15);  

 

使用前,需要在该控件或者是他的父控件中声明命名空间:

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

xmlns:自定义的空间名="http://schemas.android.com/apk/res/自定义视图类所在项目的包名"

 

比如自定义的类叫Rotate,包名是com.example.declare_styleable,那么就按如下方式来使用该控件

<com.example.declare_styleable.Rotate

                   xmlns:pt = "http://schemas.android.com/apk/res/com.example.declare_styleable" 
               pt:interpolator = "@anim/动画ID"

                   pt:fromDegrees = "0" 
               pt:toDegrees = "360"

                   pt:pivotX = "200%"

                   pt:pivotY = "300%" 
               pt:duration = "5000"  />

 

小例子:

attrs.xml(定义)

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="PersonAttr">
        <attr name="name" format="reference" />
        <attr name="sex" 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>

layout.xml(使用)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:personattr="http://schemas.android.com/apk/res/com.example.declare_styleable"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <com.example.declare_styleable.PersonView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
personattr:name="@string/person_name" personattr:weight ="fat" personattr:adult ="false" personattr:textSize="@dimen/text_size"/> </RelativeLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

attrs.xml中declare-styleable 详解(用于自定义控件的属性) 的相关文章

  • 基于linux的调试技术

    虽然使用printk函数可以很方便的将消息写入日志文件或者控制台 但是大量使用printk函数频繁的操作日志文件或者控制台文件会严重影响到linux驱动的开发性能 因此 这就需要linux驱动在开发阶段使用printk函数输出消息 在正式发
  • 怎么删除win10系统的AdobeFlash

    随着移动端的趋势大流 HTML5应用场景更加的广泛 Flash逐渐走向没落 Flash短期时间并不会彻底消失掉 Adobe Flash FLASH不只是可以制作网页 还可以制作软件AIR 制作动画 制作游戏等等 现在最新版的软件改名为Ani
  • android 透明状态栏方法及其适配键盘上推(二)

    在上一篇文章中介绍了一种设置透明状态栏及其适配键盘上推得方法 但是上一篇介绍的方法中有个缺点 就是不能消除掉statusbar的阴影 很多手机如 三星 Nexus都带有阴影 即使我用了
  • Flutter实现app自动升级

    话不多说 有过开发过移动应用的人都应该自动升级流程 首先获取本地应用版本 然后从服务器获取线上移动应用版本号作比较是否升级 第一步获取版本信息 API https pub dev packages package info 获取应用版本号
  • 移动开发!如何快速的开发一个完整的直播app,架构师必备技能

    金九银十过后各大网络平台都是各种面经分享 包括已收offer 或面试失败的都有 相信大部分人都拿到了自己心仪的大厂offer 不过也有没有少数没能进到自己内心向往的大厂而懊恼的 那么到底如何才能进大厂 该准备些什么才能进大厂 此时字节总监有
  • iOS App上传到苹果应用市场构建版本的图文教程

    使用hbuilderx的h5 或uniapp框架写的前端 进行云打包ios应用 会生成一个ipa后缀的应用文件 这个文件是没有办法像安卓应用那样直接安装在手机上面的 需要上架到苹果应用商店 用户才能下载安装使用 因此 我们这篇文章讲详细介绍
  • 安装cmake过程出错:Error when bootstrapping CMake: Cannot find a C++ compiler that supports both C++11 and ...

    Error when bootstrapping CMake Cannot find a C compiler that supports both C 11 and the specified C flags 1 没有装gcc 和 g 2
  • SSHDroid(SSH Server for Android)通过PC或命令连接android

    1 下载berserker android apps sshdroid apk 如果你懒的下载 给我留言 我会发给你 2 安装到手机 显示如图 简单解释一下 一般android系统没有root权限 Wifi Connection 是你连接的
  • Android原生系统真的那么好用吗?安卓原生系统吊打其他系统,因为有Google-Play

    Android原生系统真的那么好用吗 这种问题当然是否定的 原生 Android 指的是直接基于 AOSP 构建的而非手机厂商出厂固件修改的第三方 ROM 但包括 Nexus Pixel 或其它被 Google 直接支持的手机的可能是闭源的
  • Flutter酷炫的路由动画效果

    现在Flutter的路由效果已经非常不错了 能满足大部分App的需求 但是谁不希望自己的App更酷更炫那 下面介绍几个酷炫的路由动画 其实路由动画的原理很简单 就是重写并继承PageRouterBuilder这个类里的transitions
  • app上架流程的整理

    app的上架流程 一 准备工作 首先需要有开发者账号 企业级的账号是299 个人开发者账号是99 没有的话可以登录http developer apple com 自行申请 假如你已经有账号了 进入苹果官网点击Accout登录 二 申请证书
  • IOS高访新浪微博界面(讲解如何自定义UITableViewCell,处理@#链接 特殊字符)

    在开发过程中 有好多应用都会嵌入新浪微博的界面 今天整理一下代码 首先看界面效果图 Demo下载地址 http download csdn net detail rhljiayou 6760745 思路 首先放一个UITableView 自
  • 阿里P7大牛亲自教你!妈妈再也不用担心我的面试,讲的明明白白!

    第一次观看我文章的朋友 可以关注 点赞 转发一下 每天分享各种干货技术和程序猿趣事 前言 随着移动终端的快速发展 Android开发人员也越来越多 Android开发市场也进入了一个饱和的状态 Android开发人员也面临着难找一份好工作的
  • UE4命令行使用,解释

    命令行在外部 从命令行运行编辑项目 1 导航到您的 LauncherInstall VersionNumber Engine Binaries Win64 目录中 2 右键单击上 UE4Editor exe 的可执行文件 并选择创建快捷方式
  • xposed开发之清除应用数据(研究历程)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 最近在研究xposed 有个需求要做到清除其他应用数据 xposed功能足够强大 应该可以实现这个功能 下面是基于android4 4 4研究的思路 google只能开放了
  • Android进阶2之 阴影制作(Shadow)

    阴影制作 包括各种形状 矩形 圆形等等 以及文字等等都能设置阴影 阴影制作是什么原理呢 其实很简单 你需要设置阴影的东西被看作一个主层 然后在主层下面画一个阴影层 阴影制作涉及到一个重要函数 public void setShadowLay
  • APK加壳原理简述

    先把核心原理记录一下 代码随后再补 PRE dex文件结构知识和加壳原理 先看下dex文件的基本结构 对于加壳主要关注3个关键字 1 checksum 文件校验码 使用alder32算法 校验文件除了maigc和checksum外余下的所有
  • Linux宝塔面板命令大全,快速学会

    cd www server panel python tools py panel 123456 查看宝塔日志 cat tmp panelBoot pl 查看软件安装日志 cat tmp panelExec log 站点配置文件位置 www
  • React 教程及其API接口文档

    React 详细中文开发文档 可以阅读 http reactjs cn react docs tutorial html 英文原文 http facebook github io react 中文论坛 http react china or
  • Android4.0 SDK功能详解

    我在eoe的论坛找到的 就复制过来了 跟大家分享一下 Android 4 0 平台API等级 14 Android 4 0 是一次重要的平台发布版 为用户和应用程序开发者增加了大量的新特性 在下面我们将讨论的所有新特性和API中 因为它将

随机推荐

  • 完整的蓝屏错误代码大全详解

    完整的BSOD错误代码列表从STOP 0x1到STOP 0xC0000221 一个死机 BSOD 的蓝屏 技术上称为一个STOP错误 若在Windows遭受了严重的错误 被迫 停 的问题 在任何Windows 操作系统中都会出现BSOD错误
  • CSS基础 —— 浮动布局实例详解和清除浮动的方法

    案例解析 非浮动布局时 包裹元素高度自适应 若给p标签增加浮动属性 包裹元素高度为0 出现高度塌陷问题 在实际应用中 这并不是我们想要的效果 这时就需要清除浮动 即闭合浮动元素 解决办法 方法1 为包裹元素追加一个内容为空的元素 设置cle
  • Linux命令之sed批量替换字符串

    使用sed命令可以进行字符串的批量替换操作 以节省大量的时间成本 将多个文件中的字符串1替换为字符串2 使用的格式如下 sed i s oldstring newstring g grep oldstring rl data a 该组合操作
  • 数据结构链表基本的增删改查源码

    include
  • 火山OpenSSL支持库-04-RC加解密

    本源码转载自利快云https www lkuaiy com 火山OpenSSL支持库 04 RC加解密 一 需要调用的模块 视窗基本类 MFC界面基本类 OpenSSL 二 RC加解密简单介绍 1 RC算法的速度可以达到DES加密的10倍左
  • Ironsource sdk在Unity 2019.3.x下代码过时bug

    报错 Assets IronSource Editor FacebookSettings cs 18 48 error CS0619 PBXProject GetUnityTargetName is obsolete This functi
  • Java 面向对象

    1 继承 1 extends 用于类的继承 implements 用于接口的继承 2 extends 不能多重继承 但是 implements 可以多重继承 3 super关键字 用来引用当前对象的父类 this关键字 指向自己的引用 4
  • k8s-client-go源码剖析(一)

    简介 云原生社区活动 Kubernetes源码剖析第一期 有幸参与云原生社区举办的Kubernetes源码剖析活动 活动主要以书籍 Kubernetes源码剖析 为主要思路进行展开 提出在看书过程中遇到的问题 和社区成员一起讨论 最后会将结
  • 简述ospf的工作原理_全方位了解OSPF的工作原理以及涉及到的重要技术

    OSPF协议是IGP中的一种动态路由协议 它属于链路状态协议 交互的是LSA 链路状态通告 信息 对路由信息的认知很清晰 该文主要阐述了OSPF协议的工作原理 OSPF状态机以及OSPF协议中涉及到的重要技术 关键词 OSPF协议 LSA
  • 快乐数

    编写一个算法来判断一个数是不是 快乐数 一个 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是无限循环但始终变不到 1 如果可以变为 1 那么这个数就是快乐数 示例
  • uni-app的生命周期

    uni app的生命周期包括应用生命周期和页面生命周期 应用生命周期涵盖了整个uni app应用的启动 运行和销毁过程 主要包括以下几个生命周期函数 onLaunch 应用初始化时触发 只触发一次 onShow 应用启动或从后台进入前台时触
  • 自动化测试 selenium 解决selenium.common.exceptions.SessionNotCreatedException: Message: session not created

    问题 selenium common exceptions SessionNotCreatedException Message session not created 原因 selenium模拟的客户端对浏览器的操作 相应浏览器的驱动版本
  • java模拟post请求发送json数据

    import com alibaba fastjson JSONObject import org apache http client methods CloseableHttpResponse import org apache htt
  • Python3中pickle模块介绍

    Pyhton3中的pickle模块用于对Python对象结构的二进制进行序列化 或pickling 和反序列化 或unpickling pickling 是将Python对象及其所拥有的层次结构转化为一个字节流 byte stream 的过
  • 首次使用计算机 鼠标没反应,鼠标没反应各种解决方法教程

    我们在使用鼠标的时候开始肯定没问题 但长期使用下来 总会出现一种故障 比如最常见的鼠标没反应的问题 也就是说不管你怎么滑动鼠标 显示器里的光标都不动了 这种问题怎么解决呢 我们要分成有线鼠标和无线鼠标两种情况 一 有线鼠标没反应 一般有线鼠
  • kalilinux搭建DCN漏洞靶场

    kalilinux系统搭建DCN漏洞靶场 前言 安装kalilinux 搭建靶场 WinSCP连接kalilinux实现文件上传 导入镜像 前言 最近想学一下WEB安全 顺便学习一下靶场环境的搭建 之前搭建过webug玩了一下 但自己电脑运
  • 编程的美学标准诌议

    编程的美学标准诌议 做了几年的程序员 虽然自己写的代码还远远没有达到要求 但在日复一日的实践过程中 我逐渐开始信奉一条标准 在实现功能的前提下 简单即是美 其实 编程的过程就好比是一个建模的过程 设计就是将一个现实问题抽象成逻辑模型 而编码
  • git命令使用上传下载详情大全...

    不罗嗦直接上内容 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch a 查看所有的分支 git branch r 查看远程所有分支 git commit am in
  • CISCN(Web Ezpentest)GC、序列化、case when

    目录 REGEXP的一个点 正则 like 默认不区分大小写 当禁用了空格 regexp like的区分大小写的使用方法 CISCN 2022 初赛 ezpentest 卡点 2022 HFCTF babysql 最近又学到了一道新知识 c
  • attrs.xml中declare-styleable 详解(用于自定义控件的属性)

    1 框架定义