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