我正在 Android 中编写一个应用程序,希望用户能够下载主题和/或自己创建主题。该应用程序将附带一些默认图像,并且可以从市场/作为其他 APK 安装主题,或者可以将其放在 SD 卡上 - 两者都可以。
我想要的是: - 允许主题覆盖按钮中的图像 - 现在我有 XML 样式来做一些事情,比如在选择时突出显示(用于按钮背景 + 用于将按钮 bg 与实际按钮图像组合) - 允许主题覆盖某些事物的背景和文本颜色(我现在不在那里使用样式,但如果那样会让事情变得更容易的话我可以)
我想知道是否可以根据配置覆盖我的应用程序/Activity 的 onCreate 中的样式定义——我不介意用户在样式更改后必须重新启动应用程序。
此外,如果它是另一个 APK,我的主 APK 将如何获取它 - 通过枚举包并按包名称过滤?
有没有好的教程?
最佳答案
这种东西在 Android 中并没有作为标准设施得到真正的支持,因此您需要做大量的工作来自己构建它。
您需要了解的第一件事是 Context.createPackageContext(),它允许您为另一个 .apk 创建上下文(并因此加载其资源)。然后,您可以使用该上下文来加载图像等。请注意,这些资源与您自己的应用程序的资源完全不同,因此您不能使用主题等标准设施来进行替换。您只需要手动将代码放在任何您想要加载“主题”资源的地方,这些资源可以从该上下文中显式检索它。
要发现可用的 .apk(以及与 createPackageContext() 一起使用的包名称),您可以使用 PackageManager 工具查询组件。例如,您可以说每个主题 .apk 都有这样一个:
<receiver android:name="something">
<intent-filter>
<action android:name="com.mydoman.action.THEME" />
</intent-filter>
</receiver>
现在您可以通过 PackageManager.queryBroadcastReceivers() 找到所有具有此类接收器的 .apks:
要选择具有上述 Intent 过滤器的 Intent,请使用以下 Intent:
Intent intent = new Intent("com.mydoman.action.THEME");
关于android - 在 Android 中编写主题应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6937279/