android Theme使用三
☆ obtainStyledAttributes参数说明 和使用说明
1) obtainStyledAttributes(int[]attrs)
int[] attrs返回的是attrs.xml里一个styleable包含的属性数组。
<declare-styleablename="Tip">
<attr name="left_icon"format="reference" />
<attr name="tiptextSize"format="dimension" />
<attr name="close_icon"format="reference" />
<attr name="bgcolor"format="color" />
</declare-styleable>
这段styleable,使用obtainStyledAttributes(R.styleable.Tip);返回Tip包含的4个属性数组。
这些属性的值我们写在哪儿呢?这个方法经过我的测试,这些属性的值必须写在application中android:theme对应的style下,什么意思?
就是项目Manifest.xml文件中application节点下android:theme对应的值,即:
<application
android:name="com.My.module.App"
android:allowBackup="true"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:theme="@style/My.Theme.dalancon">
就是名称name=”My.Theme.dalancon”的style。
<stylename="My.Theme.dalancon" parent="@style/My.Theme">
<item name="vpiTabPageIndicatorStyle">@style/My.TabPageIndicator</item>
<item name="left_icon">@drawable/comment_btn</item>
<item name="tiptextSize">8sp</item>
<item name="close_icon">@drawable/btn_delete</item>
<item name="bgcolor">#FF5601</item>
</style>
这样程序代码才能够获取,如果你把这些属性值写在其他的style中,将没有效果。
2) obtainStyledAttributes(intresid, int[] attrs)
int[] attrs : attrs返回的是attrs.xml里一个styleable包含的属性数组。
int resid : 完成attrs数组中的属性赋值的Style资源name
比如: a =context.obtainStyledAttributes(R.style.tipStyle, R.styleable.Tip);
<stylename="tipStyle">
<item name="left_icon">@drawable/comment_btn</item>
<item name="tiptextSize">8sp</item>
<item name="close_icon">@drawable/btn_delete</item>
<item name="bgcolor">#FF5601</item>
</style>
和第一种obtainStyledAttributes(int[]attrs) 情况不同,这次的属性只要在一个独立的style下赋值就OK了。跟theme对应的style没关系。
3) obtainStyledAttributes(AttributeSetset, int[] attrs)
相当于context.obtainStyledAttributes(AttributeSetset, int[], 0, 0);的情况
4) obtainStyledAttributes(AttributeSetset, int[] attrs, int defStyleAttr, int defStyleRes)
set:可以传空null
attrs : attrs返回的是attrs.xml里一个styleable包含的属性数组。
defStyleAttr: 一个在attrs.xml中声明的属性名。R.attr.tipStyle
defStyleRes:一个在styles.xml或themes.xml中声明的style的id。R.style.tipStyle
说明一下最后两个参数:
1. defStyleAttr
a) 当defStyleAttr等于attrs.xml中声明的一个属性
<attrname="tipStyle" format="reference"></attr> 时候
format是引用类型,表示我们要在theme中对tipStyle这个属性进行赋值。
<stylename="tipStyle">
<item name="left_icon">@drawable/comment_btn</item>
<item name="tiptextSize">8sp</item>
<item name="close_icon">@drawable/btn_delete</item>
<item name="bgcolor">#FF5601</item>
</style>
然后在theme中使用它
<stylename="My.Theme.dalancon" parent="@style/My.Theme">
<item name="vpiTabPageIndicatorStyle">@style/My.Widget.TabPageIndicator</item>
<item name="tipStyle">@style/tipStyle</item>
</style>
b) 当defStyleAttr等于0,表示没有默认值,
2. defStyleRes
a) defStyleRes等于某一个style资源name
比如: a =context.obtainStyledAttributes(null, R.styleable.Tip, 0,R.style.tipStyle);表示使用style中名字为tipStyle的Style资源。
<stylename="tipStyle">
<item name="left_icon">@drawable/comment_btn</item>
<item name="tiptextSize">8sp</item>
<item name="close_icon">@drawable/btn_delete</item>
<item name="bgcolor">#FF5601</item>
</style>
这时候不需要在theme中引用。
b) defStyleRes等于0,表示没有默认值。
当最后两个参数都为0的时候该方法就和obtainStyledAttributes (AttributeSet set, int[] attrs)一样了。查看源码会发现obtainStyledAttributes(AttributeSet set, int[] attrs)里面调用的就是
obtainStyledAttributes(AttributeSet set, int[] attrs, 0, 0)。这种情况就去系统theme中寻找合适的值,这个时候和第一种obtainStyledAttributes(int[] attrs) 情况相同,需要在theme对应的style下为每一个属性赋值。
<stylename="My.Theme.dalancon" parent="@style/My.Theme">
<item name="vpiTabPageIndicatorStyle">@style/My.TabPageIndicator</item>
<itemname="left_icon">@drawable/comment_btn</item>
<itemname="tiptextSize">8sp</item>
<itemname="close_icon">@drawable/btn_delete</item>
<item name="bgcolor">#FF5601</item>
</style>
android Theme使用三的更多相关文章
- Android Holo Theme的三种表现形式
		摘录自:http://blog.csdn.net/xyz_lmn/article/details/12000941 Holo Theme的三种表现形式 Holo Theme是android4.0开始提 ... 
- Android学习(三)
		学号 20189214 <Android程序开发>第八周学习总结 教材学习内容总结 GridView GridView和ListView一样是AbsListView的子类; 都需要一个Ad ... 
- Android教材 | 第三章 Android界面事件处理(二)—— 杰瑞教育原创教材试读
		编者按 JRedu 杰瑞教育原创系列教材将于年后与大家正式见面.为更好的借鉴读者意见,我们将会陆续地在博客园推出一系列教材试读.我们也热忱的欢迎广大博友与我们互动,提出宝贵意见. 本篇博客将推出教材 ... 
- 【Android】完善Android学习(三:API 3.0)
		备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ... 
- Android笔记(三) 使得Activity之间可以跳转---Intent
		什么是Intent 一个APP肯定不单单由一个Activity构成,我们在使用过程中,经常需要在多个Activity中跳转,Android中Intent可以帮我们来完成在各个Activity中跳转的功 ... 
- android:theme决定AlertDialog的背景颜色
		最近遇到一个很奇怪的问题,两个项目弹出的dialog背景颜色不一样,一个是黑色的,一个是白色的,最后发现是AndroidManifest.xml文件里面application指定的android:th ... 
- Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
		Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ... 
- Android反编译(三)之重签名
		Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Androi ... 
- Android系统自带样式(android:theme)详解-(转)
		android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式 android:theme="@androi ... 
随机推荐
- js的变量作用域
			js不支持块级变量作用域,而是包含它们的函数的作用域, 例如: function query() { ; ; i < ; i++) { var b = i; } return b + a; } ... 
- MVC小系列(二十二)【MVC的Session超时,导致的跳转问题】
			由于mvc内部跳转机制的问题,它只在当前的action所渲染的view上进行跳转,如果希望在当前页面跳,需要将mvc方法改为js方法: filterContext.Result = new Redir ... 
- datagrid合并行列--并不能影响序号列内容...(formatter的锅.)
			datagrid合并行列 //datagrid组件. $('#id_dailylist_dg').datagrid({ //url:'datagrid_data.json', columns:[[ { ... 
- EIGamal密码体制
			EIGamal密码体制:由EIGamal提出,是一种基于离散对数问题的双钥密码体制,既可用于加密,又可以用于签名. 密钥对生成步骤: 1.取大素数p和g<p(g最好是p的素根) 2.选一整数x& ... 
- Hash函数的安全性
			我们为了保证消息的完整性,引进了散列函数,那么散列函数会对安全正造成什么影响呢?这是需要好好研究一番的问题. 三个概念: 1.如果y<>x,且h(x)=h(y),则称为碰撞. 2.对于给定 ... 
- ubuntu  安装flash插件
			参考文献: http://wiki.debian.org.hk/w/Install_Flash_Player_with_APTapt-get install adobe-flashplugin 
- Unix环境高级编程学习笔记——dup
			dup 和 dup2 dup和dup2,都是用来将一个文件描述符复制给另一个文件描述符上,这两个文件描述符都指向同一个文件状态标志上. 只是文件描述符的大小不一样,dup所执行下的复制,肯定是返回 ... 
- ubuntu下怎么合并windows下分割的zip包
			cat ziptest.z* > google_bak.zip 点击打开链接http://blog.51yip.com/linux/988.html 
- 虚拟机配置网络 vmware 【nat方式】
			先看下物理机和虚拟机网卡的设置: 虚拟机操作系统: 联网方式: 好了,现在进入正题,配置: 首相配置/etc/sysconfig/network-scripts/ifcfg-eth0,这里配置ip和d ... 
- Delphi实用小function
			Write Log // strLog : the log content need write to log file; // strFile: the compliete file path(in ... 
