Android开发——如何在第三方应用中调用系统未开放的主题和样式
2013-03-15 17:12
831 查看
估计没多少人会用到,权当自己的笔记。
以android 4.0代码为例,如果写了一个Button,想要使用某种样式(系统或自定义的都可以),可以在.xml布局文件中如下定义。
<Button
......
style="@android:style/Widget.DeviceDefault.Button"
/>
上述代码引用了Android系统默认的Button样式。这样是可以的,因为 Widget.DeviceDefault.Button 这个样式是开放的。
所谓开放,是指该样式在系统中经过注册,可以被第三方应用调用,直观的表现就是可以编译通过。
具体的,注册是 /frameworks/base/core/res/res/values/public.xml 在完成的,内容如下:
<resources>
<!-- We don't want to publish private symbols in android.R as part of the
SDK. Instead, put them here. -->
<private-symbols package="com.android.internal" />
......
<public type="style" name="Widget.DeviceDefault.Button" id="0x01030141" />
<public type="style" name="Widget.DeviceDefault.Button.Small" id="0x01030142" />
<public type="style" name="Widget.DeviceDefault.Button.Inset" id="0x01030143" />
<public type="style" name="Widget.DeviceDefault.Button.Toggle" id="0x01030144" />
<public type="style" name="Widget.DeviceDefault.Button.Borderless.Small" id="0x01030145" />
......
</resources>
然而,并且所有样式和主题都是公开的;没有在public.xml中定义的,就不能用上面的方法调用。
<Button
......
style="@android:style/Widget.DeviceDefault.Button.AlertDialog"
/>
如果使用上述代码,则编译会报错: Error: Resource is not public. (at 'style' with value '@android:style/Widget.DeviceDefault.Button.AlertDialog').
解决方法很简单,在“@”后面加一个“*”,改为:
<Button
......
style="@*android:style/Widget.DeviceDefault.Button.AlertDialog"
/>
这样就可以了。
以android 4.0代码为例,如果写了一个Button,想要使用某种样式(系统或自定义的都可以),可以在.xml布局文件中如下定义。
<Button
......
style="@android:style/Widget.DeviceDefault.Button"
/>
上述代码引用了Android系统默认的Button样式。这样是可以的,因为 Widget.DeviceDefault.Button 这个样式是开放的。
所谓开放,是指该样式在系统中经过注册,可以被第三方应用调用,直观的表现就是可以编译通过。
具体的,注册是 /frameworks/base/core/res/res/values/public.xml 在完成的,内容如下:
<resources>
<!-- We don't want to publish private symbols in android.R as part of the
SDK. Instead, put them here. -->
<private-symbols package="com.android.internal" />
......
<public type="style" name="Widget.DeviceDefault.Button" id="0x01030141" />
<public type="style" name="Widget.DeviceDefault.Button.Small" id="0x01030142" />
<public type="style" name="Widget.DeviceDefault.Button.Inset" id="0x01030143" />
<public type="style" name="Widget.DeviceDefault.Button.Toggle" id="0x01030144" />
<public type="style" name="Widget.DeviceDefault.Button.Borderless.Small" id="0x01030145" />
......
</resources>
然而,并且所有样式和主题都是公开的;没有在public.xml中定义的,就不能用上面的方法调用。
<Button
......
style="@android:style/Widget.DeviceDefault.Button.AlertDialog"
/>
如果使用上述代码,则编译会报错: Error: Resource is not public. (at 'style' with value '@android:style/Widget.DeviceDefault.Button.AlertDialog').
解决方法很简单,在“@”后面加一个“*”,改为:
<Button
......
style="@*android:style/Widget.DeviceDefault.Button.AlertDialog"
/>
这样就可以了。
相关文章推荐
- 【Android N兼容问题】Android N上系统预置应用调用第三方库初始化失败
- Android应用开发——系统自带样式Android:theme
- Android应用开发——系统自带样式Android:theme
- Android开发之:如何使用样式和主题
- iOS开发-从app跳转到第三方应用和调用系统功能
- 【Android 应用开发】 ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改
- java应用中,调用第三方api如何处理异常(系统异常、操作异常等等)
- android 开发如何获得第三方应用Widget的包名和类名
- C#开发移动应用系列(4.调用系统应用,以及第三方应用(调用与被调用))
- Android应用开发——系统自带样式Android:theme
- 请教一个问题,Android应用运行时在调用某个API(比如相机)时,系统如何判断这个应用是否具备相应的权限?
- android开发之如何将一般应用变身系统级应用
- 【Android 应用开发】 ActionBar 样式详解 -- 样式 主题 简介 Actionbar 的 icon logo 标题 菜单样式修改
- 如何在自己的信息管理系统里集成第三方权限控制组件 - 开发一个好用稳定的开放组件
- Android应用开发---调用系统的打电话功能demo
- Android学习笔记 —— Android开发中,不调用系统浏览器直接在应用中显示指定网址的内容
- Android如何查找应用中调用的系统资源
- Android源码开发----如何编写Android系统应用
- 请教一个问题,Android应用运行时在调用某个API(比如相机)时,系统如何判断这个应用是否具备相应的权限?