【问题标题】:Extend an external application Style/Theme扩展外部应用程序样式/主题
【发布时间】:2013-09-16 12:53:11
【问题描述】:

我想定义一种 android 样式,该样式扩展在未作为库导入的不同应用程序/包中定义的样式。

从定义一个xml引用到一个android资源here

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

似乎可以指定定义资源的外部(用于引用系统资源@android:string/name

现在,我有我的主应用程序(包:com.example.test),它定义了一个属性和一个主题,如下所示:

<declare-styleable name="TestAttrs">
    <attr name="testColor" format="color" />
</declare-styleable>

<style name="TestTheme" parent="@android:style/Theme">
    <item name="testColor">#FFFF0000</item>
</style>

如果在第二个不同的应用程序中,我尝试使用以前的包来使用上面显示的语法定义样式,我收到一条错误消息,提示找不到资源。

 <style name="SubTheme" parent="@com.example.test:style/TestTheme">
    <item name="com.example.test:testColor">#FF00FF00</item>
 </style>

是否可以告诉编译器在哪里寻找包?

我必须将我的初始样式/属性定义为共享吗?

【问题讨论】:

    标签: android attributes android-resources android-theme


    【解决方案1】:

    您是否声明了命名空间:

    <resources xmlns:android="http://schemas.android.com/apk/res/android"
               xmlns:com.example.test="...external resource's namespace">
    

    【讨论】:

    • 如何定义外部资源命名空间?我试过这样:“schemas.android.com/apk/res/com.example.test
    • 不确定,您可以访问外部代码吗?它应该在那里。例如,对于 admob,我必须这样做 xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
    • 是的,我可以访问。目前我只是在玩测试项目以使其正常工作,然后再开始认真使用它。
    【解决方案2】:

    package_name 不是指设备上的外部应用程序,而是您正在构建的其他库项目包(每个都有自己的资源表,然后合并)。

    要访问外部应用程序中的私有资源,您可以使用PackageManager.getResourcesForApplication() 或公开一个 ContentProvider 并自己做。

    【讨论】:

    • 好的,我知道我可以通过代码获取资源,但我需要通过 xml 访问它们。你知道将已知外部包暴露给 xml 命名空间的方法吗?
    • 没有办法(据我所知)。
    • 我在问这个 powerAmp 皮肤项目的原因:github.com/maxmpz/powerampapi/blob/master/poweramp_skin_sdk/… 他们正在这样做。但我不明白他们是如何建造的。
    • 看起来他们正在每个皮肤的 public.xml 中设置 id,然后通过调用 PackageManager.getResourcesForApplication() 在应用程序中引用它们,然后使用 id(0x80050000 等)。跨度>
    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2011-02-08
    相关资源
    最近更新 更多