android自定义控件是一个 内部类 如何在xml中引用,android 自定义view属性

android

自定义view属性

一个完美的自定义控件也可以添加xml来配置属性和风格。要实现这一点,可按照下列步骤来做:

1) 添加自定义属性到xml文件中

2) 在xml的中,指定属性的值

3) 在view中获取xml中的值

4) 将获取的值应用到view中

下面继续举例说明:

添加 到你的程序中,习惯上一般是放在res/values/attrs.xml文件中,例如:

1.

2.

3.

4.

5.

6.

7.

8.

9.

这段代码声明了两个自定义的属性 showText和labelPosition,他们属于一个自定义的实体PieChat。

一旦定义好了属性,就可以在xml中使用这些属性了,下面是一个简单的例子:

1.

2.

3. xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">

4.

5. custom:showText="true"

6. custom:labelPosition="left" />

7.

可以看到和标准的Android的组件一样,唯一的差别在他们属于不同的命名空间,标准的组件的命名空间一般是http://schemas.android.com/apk/res/android,

而我们自定义的命名空间是http://schemas.android.com/apk/res/[your package

name]。注意到xmlns:custom中的custom了吗?你可以使用任意的字符,但是

要和下面的控件的定义中的字符要保持一致。

另外一个需要注意的是,

xml中的tag:com.example.customviews.charting.PieChart,需要的完整的包名,如果你的自定义控件是个内部类(好吧,这么奇葩),

也必须给全路径,假设PieChat有个内部类PieView,如果在XML中引用它,需要这样使用:com.example.customviews.charting.PieChart$PieView

3) 应用自定义的属性值

当View被创建的时候,可以通过AttributeSet读取所有的定义在xml中的属性,在构造函数中通过obtainStyledAttributes读取attrs,

该方法会返回一个TypeArray数组。通过TypeArray可以读取到已经定义在XML中的方法。下面的例子展示了读取上文中的xml属性值。

1. public PieChart(Context context, AttributeSet attrs) {

2. super(context, attrs);

3. TypedArray a = context.getTheme().obtainStyledAttributes(

4. attrs,

5. R.styleable.PieChart,

6. 0, 0);

7.

8. try {

9. mShowText = a.getBoolean(R.styleable.PieChart_showText, false);

10. mTextPos =

a.getInteger(R.styleable.PieChart_labelPosition, 0);

11. } finally {

12. a.recycle();

13. }

14. }

需要强调的是, TypeArray使用完毕后需要销毁,不然会发生内存泄露。

4) 添加自定义的方法和事件

自定义属性很强大,但缺点也很明显,它只能在view初始化的时候被应用到控件中。为了添加更加灵活的行为,

可以为每一个属性添加getter和setter

对。下面的代码段展示了PieChat的属性showText

1. public boolean isShowText() {

2. return mShowText;

3. }

4.

5. public void setShowText(boolean showText) {

6. mShowText = showText;

7. invalidate();

8. requestLayout();

9. }

在setShowText中调用了invalidate()和requestLayout(),

保证了view能及时的更新。在你的自定义View中,如果有属性被改变并且需要立即生效时,

你也必须调用这个方法。 这样系统会立即重新绘制view。

同样的,如果view的尺寸或者形状发生了变化,你也必须调用requestLayout(). 不然会引起

很多问题。

一般你也需要添加事件回调来和调用者沟通。 例如PieChat暴露了OnCurrentItemChanged来通知调用者pie

chat发生了旋转。

在开发过程中,很容易忘记添加一些属性和事件,特别是作者是这个自定义View的唯一使用者的时候。为使View有更普遍的适用性,应当花些时间考虑的更加周全。

你最好是暴露所有的可能改变外观和行为的属性。当然这也对你提出了更高的要求,不然怎么进不呢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/271604.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/271604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑操作系统维护10条基础知识!

电脑操作系统是电脑的核心,我们平时如何维护电脑操作系统?下面是小编分享是电脑系统维护基础知识,一起来看一下吧。1、经常进行“磁盘清理”和磁盘碎片整理”当硬盘用久了,无数次的新增、更改和删除程序和文件后,就会造成很多断断…

光子浏览器_烟台招聘信息烟台光子信息科技有限公司招聘(五险一金,餐补)...

↑烟台招聘信息网点击关注哦汇集烟台市招聘信息,含盖烟台人才网,烟台招聘会,烟台招聘网、烟台优秀企业、事业单位等优质工作岗位及招聘信息,烟台求职找工作和烟台兼职资讯平台… 【温馨提示】:因网络诈骗现象较多&…

DES加密

DES采用了64位的分组长度和56位的密钥长度,是对称加密的一种。 DES的理论进化主线是 1945年Shannon大神提出的交替使用混淆(使密文与密钥的统计关系变复杂)和扩散(使明文与密文的统计关系变复杂)的乘积密码&#xff08…

计算机系统基础:输入输出技术知识笔记

1、内存与接口的编址方式 1.1 内存和接口地址独立编址方法 内存地址和接口地址是两个完全独立和相互隔离的地址空间。访问数据的指令也不同,接口只有读写指令,其余都是内存指令。 特点:接口和内存指令容易区分,但接口指令太少、功…

小米max2 android p,这就是小米Max2?6.4英寸超大屏幕配置大升级

标签:小米手机(3463)小米(3233)虽说今年上半年小米6的重磅机型会是小米6,但随着小米Max在官方商城的下架,这款巨屏手机的更新换代产品已经在网络上浮出水面。根据知名图形测试网站GFXBench最新公布的信息显示,一款代号为Oxygen的小…

winform直接控制云台_速学指南,2分钟学会Feiyu pocket口袋云台的隐藏功能操作

上周三,Feiyu pocket口袋云台相机正式发布,重量仅115g,单手可持,可拍摄 4K/60fps高清画面;6轴混合防抖技术加持,赋予轨迹延时、全域模式、慢动作、全跟随等模式更专业、高效的拍摄体验。Feiyu pocket口袋云…

Python中处理DataFrame,R绘图

IN Pythonfrom pandas import DataFrame,Seriesimport pandas as pdimport numpy as npdata pd.read_csv(rC:\Users\lxy\Desktop\工作相关\工作报告KPI\pydata-book-master\ch06\ex5.csv)data.index.namexdata.to_csv(D:\df.csv)IN R> library(ggplot2)> df <- read.…

ThreadPoolTaskExecutor和ThreadPoolExecutor区别

初学者很容易看错&#xff0c;如果没有看到spring或者JUC源码的人肯定是不太了解的。 ThreadPoolTaskExecutor是spring core包中的&#xff0c;而ThreadPoolExecutor是JDK中的JUC。ThreadPoolTaskExecutor是对ThreadPoolExecutor进行了封装处理。 ThreadPoolExecutor ThreadP…

电脑技巧:如何解决大部分的电脑防弹窗广告

相信很多人都有这种情况&#xff0c;打开电脑,电脑上全部各种广告弹窗,或者在办公、追剧的时候,电脑突然就弹出了一条&#xff0c;是不是很烦人&#xff0c;这几招不用借助软件&#xff0c;就能解决弹窗的方法不防一试。 方法一&#xff1a; 第一种方法&#xff0c;可以对付部分…

c 跨平台android,Unity 使用C/C++ 跨平台终极解决方式(PC,iOS,Android,以及支持C/C++的平台)...

PC的事实上根本不用说&#xff0c;毕竟C#和C交互的文章已经够多了&#xff0c;当然我自觉得经过几次折腾后。差点儿全部游戏须要到的操作我都掌握了(各种传參方法&#xff0c;各种坑&#xff0c;不懂的能够留言问。尽管基本上没人看。哈哈)废话不多说&#xff0c;我们主要来讲两…

hades武器第四形态解锁_凯多的第四个技能预告——冰冻!

在《海贼王》中&#xff0c;四皇凯多被誉为“海陆空最强生物”&#xff0c;能够变成神龙&#xff0c;如果不出意外的话&#xff0c;凯多应该是动物系幻兽种神龙果实的能力者。毕竟凯多的海贼团就叫做“百兽海贼团”&#xff0c;手下也都是动物系果实能力者&#xff0c;能够降服…

解决git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. Pleas

今天用idea提交代码到github上,push后报错 gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 一:原因分析 Permission denied (publickey) 没…

转载------------java equals 方法

作者&#xff1a;海子出处&#xff1a;http://www.cnblogs.com/dolphin0520/浅谈Java中的equals和 在初学Java时&#xff0c;可能会经常碰到下面的代码&#xff1a; 1 String str1 new String("hello"); 2 String str2 new String("hello"); 3 …

计算机系统基础:校验码知识笔记

1、校验码概念 校验码主要是为了解决计算机各部件进行数据传输和交换&#xff0c;确保传送过程的正确无误&#xff0c;一是为了提高硬件电路的可靠性&#xff0c;二是提高代码的校验能力。通常会用校验码来检查传送的数据是否正确。 校验码编码分为两类&#xff1a;合法编码、错…

qml与HTML数据交互,GitHub - toby20130333/QtQuickHtmlBridge: 基于QtQuick的C++,qml,Html三者的Bridge交互...

基于QtQuick的C,qml,Html三者的Bridge交互主要功能自定义C对象并注册到QML可以在QML中继续扩展C对象的属性和方法 信号等将C对象注入到WebChannelHtml中引入C对象JavaScript与C直接交互示例代码说明main.cpp://该实例必须直接继承自Object的 QWidget的忽略qmlRegisterType(&quo…

html为什么要进行表单验证_化学锚栓为什么要进行拉拔试验?

点击箭头处“蓝色字”&#xff0c;关注我们哦&#xff01;&#xff01;化学锚栓是继膨胀锚栓之后出现的一种新型紧固材料&#xff0c;由化学药剂与金属杆体组成&#xff0c;是通过特制的化学粘接剂&#xff0c;将螺杆胶结固定于砼基材钻孔中&#xff0c;以实现对固定件锚固的复…

电路基础知识讲解(太全面了)

IT技术分享社区个人博客网站&#xff1a;https://programmerblog.xyz文章推荐程序员效率&#xff1a;画流程图常用的工具程序员效率&#xff1a;整理常用的在线笔记软件远程办公&#xff1a;常用的远程协助软件&#xff0c;你都知道吗&#xff1f;51单片机程序下载、ISP及串口基…

github设置仓库可见性 私人仓库设置

一:点击Setting 二:点击Make private 三:阅读关于将仓库设为私有的警告。 入您要设为私有的仓库的名称&#xff0c;例如 accountname/reponame。 单击 I understand, make this repository private&#xff08;我已了解&#xff0c;请将此仓库设为私有&#xff09;

Git合并分支操作

1. 添加自己的文件 git add .; 2. 缓存自己的文件 git stash; 3. 查看状态 git status; 4. 获取别的分支 git pull origin master(分支名); 5. 出栈自己的文件 git stash pop 。 转载于:https://www.cnblogs.com/csl0910/p/5605868.html