admin管理员组

文章数量:1579365

Android系统预制资源在XML文件中引用的特殊语法定义如下:

//可以引用系统所有资源,public & private

@*android:type/name

//只能引用系统public的资源

@android:type/name

//注意:没在frameworks/base/core/res/res/values/public.xml(也就是<sdk_path>\platforms\android-X\data\res\values\public.xml)中申明的资源App时不推荐使用的。

Android在XML文件中引用当前主题属性的语法定义如下:

?[<package_name>:][<resource_type>/]<resource_name>

//资源值允许引用当前主题中的属性的值,这个属性值只能在style资源和XML中使用,随着当前主题的切换该值也在变换,该resource_name不需要自己定义,系统会自己在当前主题下寻找,常见的譬如动画中等。

Android在XML文件中创建或者引用资源语法定义如下:

//在R.java的type内部类中添加一条静态常量id资源标识符,如果标示符(包括系统资源)已经存在则表示引用该标示符。

@+type/name

//在R.java中寻找已经定义的标识符,如果找不到则提示失败错误,一般在xml中定义有先后关系。

@type/name

//所以一般推荐直接使用+号避免不必要的意外。

Android在XML文件中xmlns语法定义如下:

//xmlns(XML Namespaces)是XML的命名空间

//通用XML命名空间格式规则

xmlns:namespace-prefix=“namespaceURI”

在Android的XML中命名空间规则如下:

xmlns:namespace-prefix=http://schemas.android/apk/res/应用程序包路径

在使用时规则如下:

namespace-prefix:属性

切记,xmlns的定义必须放在最外层开始的的标记中,譬如我们Activity的xml文件的根布局中的android前缀、tools前缀、自定义View的前缀等。常见的例子如下:

//android即为frameworks/base/core/res/res/values/attrs.xml中的属性

xmlns:android=“http://schemas.android/apk/res/android”

//开发调试利器,不再过多说明

xmlns:tools=“http://schemas.android/tools”

//Email App中res/values/attrs.xml等自定义属性

xmlns:settings=“http://schemas.android/apk/res/com.android.email”

2-6 Android应用Theme、Style使用小结


到此关于Android应用中如何定义Theme、Style及使用和继承重写相信大家已经明白了,再出现诡异的现象就可以通过查询相关API及google结合就能完全理会其中的原因了,而不是停留在能搜到复制;下面一节我们将针对上面的这些使用进行粗略的源码分析说明。

【工匠若水 http://blog.csdn/yanbober 未经允许严禁转载,请尊重作者劳动成果。私信联系我】

3 源码结构浅析

============

有了上面的应用使用基础,下面的源码简单浅析可能存在跳跃性和经验性,不会像之前博客那样系统性的从头到尾进行分析,而是分点点到为止,感兴趣的同学可以自行深入研读。

3-1 追根溯源Theme、Style等根源


在我们App开发中通常我们会在新建工程后的AndroidManifest.xml文件中看见工程默认引用了应用包下自定义的主题@style/AppTheme(用法完全符合上一大节的规则)。该主题在当前应用包的style.xml中定义如下:

看着木有,它活生生的继承了Theme.AppCompat.Light.DarkActionBar这个style,这玩意又在framework的support v7包下res的themes.xml文件中,具体如下:

哈哈,原来如此,这里的Theme.Light你应该十分熟悉了吧(这就是以前我们App用的不是Support包,而是默认的时候,theme默认就是这玩意哈),这玩意就在framework的base下的themes.xml中定义着呢(所以通过了android:进行引用,留意细节吧),具体如下:

到这里我们就很容易明白啦,Theme.Light的父类原来是Theme哇,也在这个文件中,如下:

看注释吧,这货有接近400多个item属性,这也就是我们Android关于Theme的开山鼻祖了,在我们自定义时其实来这看比去API查还方便呢(其实需要两个互相配合,一个查,一个看解释,哈哈),因为它里面定义了关于我们整个应用中文字样式、按钮样式、列表样式、窗体样式、对话框样式等,这些样式都是默认样式,它还有很多我们常用的扩展样式,譬如Theme.Light、Theme.NoTitleBar、Theme.NoTitleBar.Fullscreen等等,反正你要有需求来这里搞就行。当我们继承使用时只用在前加上android:即可,有些属性可能是找不到的。同理,我们所谓的style、attr等等也都是这么个框架,大致位置也类似主题Theme的,所以这里不再过多说明,自行脑补即可。

3-2 Theme、Style等res资源客户化流程


对于纯App开发来说这一个知识点可以忽略,因为本小节需要大致了解Android源码的结构和编译框架,对于固件等开发来说这个还是比较重要的,记得以前做TV盒子开发时很多系统资源需要替换及添加,也就是说会稍微涉及到修改System UI及FW的res,那

本文标签: 源码androidThemestyle