admin管理员组文章数量:1579439
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,那
版权声明:本文标题:Android开发之Theme、Style探索及源码浅析(1) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1727854619a1133890.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论