☆ 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使用三的更多相关文章

  1. Android Holo Theme的三种表现形式

    摘录自:http://blog.csdn.net/xyz_lmn/article/details/12000941 Holo Theme的三种表现形式 Holo Theme是android4.0开始提 ...

  2. Android学习(三)

    学号 20189214 <Android程序开发>第八周学习总结 教材学习内容总结 GridView GridView和ListView一样是AbsListView的子类; 都需要一个Ad ...

  3. Android教材 | 第三章 Android界面事件处理(二)—— 杰瑞教育原创教材试读

     编者按 JRedu 杰瑞教育原创系列教材将于年后与大家正式见面.为更好的借鉴读者意见,我们将会陆续地在博客园推出一系列教材试读.我们也热忱的欢迎广大博友与我们互动,提出宝贵意见. 本篇博客将推出教材 ...

  4. 【Android】完善Android学习(三:API 3.0)

    备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...

  5. Android笔记(三) 使得Activity之间可以跳转---Intent

    什么是Intent 一个APP肯定不单单由一个Activity构成,我们在使用过程中,经常需要在多个Activity中跳转,Android中Intent可以帮我们来完成在各个Activity中跳转的功 ...

  6. android:theme决定AlertDialog的背景颜色

    最近遇到一个很奇怪的问题,两个项目弹出的dialog背景颜色不一样,一个是黑色的,一个是白色的,最后发现是AndroidManifest.xml文件里面application指定的android:th ...

  7. Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复

    Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ...

  8. Android反编译(三)之重签名

    Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Androi ...

  9. Android系统自带样式(android:theme)详解-(转)

    android:theme="@android:style/Theme.Dialog" : Activity显示为对话框模式 android:theme="@androi ...

随机推荐

  1. 理解C#中的继承

    继承 1.创建子类对象的时候,在子类对象中会为子类对象的字段开辟空间,也会为父类对象的所有字段开辟空间.只不过父类私有的成员访问不到而已. 2.base关键字可以调用父类的非私有成员. 3.子类的访问 ...

  2. pageContext.request.contextPath

    jsp:<c:set var="ctxStatic" value="${pageContext.request.contextPath}"/>嵌套d ...

  3. works-er

  4. 一些VR延迟优化方法

    http://m.blog.csdn.net/article/details?id=50667507 VR中的”延迟”, 特指”Motion-To-Photon Latency”, 指的是从用户运动开 ...

  5. C++编程注意事项

    1.所有成员变量在构造函数中进行初始化操作,如指针赋值为空,bool赋值为FALSE(默认为TRUE); 2.构造函数与析构函数配对出现,执行反向操作,保证执行析构之后,没有遗留问题存在: 3.如果需 ...

  6. JS模版引擎[20行代码实现模版引擎读后感]

    曾经阅读过<只有20行JAVASCRIPT代码, 手把手教你写一个页面模版引擎>这篇文章, 对其中实现模版的想法实在膜拜, 于是有了这篇读后感, 谈谈自己对模版引擎的理解, 以及用自己的语 ...

  7. 06_关于SqlSession

    一.SqlSession适用范围 (1).SqlSessionFactoryBuilder 通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory 将Sql ...

  8. 关于c++的输入

    vector<int> iv1, iv2; cout << "请为第一个vector容器装填整数元素,以s结尾:" << endl; int n ...

  9. 配置php连接apache

    配置php连接apache 1.安装php所需要的库 yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel li ...

  10. ellang 中进程异步通信中的信箱与保序

    erlang 进程通讯中 执行到 receive 语句时 如果信箱没有消息可以匹配时会暂停等待消息. go() -> register(echo, spawn(test_pid,loop,[]) ...