我有一个测试多模块项目,有些模块看不到我的应用程序主题。更详细地讲,这些模块如下:应用程序,通用,首页和详细信息。
应用程序模块包含一个活动和导航,公用包含字符串,样式和home / detail包含一个虚拟片段。所有片段都实现了包含我的样式的通用模块。
// Modules
implementation project(path: ':navigation')
implementation project(path: ':common')
因此,当我进入活动的布局编辑器并尝试从预览中更改主题时,可以看到并选择我的主题。
但是我转到HomeFragment的布局,不存在这样的选项。
当然,当我运行应用程序时,样式可以按预期工作,唯一的问题是预览不起作用。这是通用模块上的主题:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.Leanback.Browse">
<!-- Theme.AppCompat compatibility: -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<!-- Theme.MaterialComponents compatibility: -->
<item name="colorPrimary">#171717</item>
<item name="colorPrimaryVariant">#212121</item>
<item name="colorAccent">#DD1C1A</item>
<item name="colorOnPrimary">#eeeeee</item>
<item name="colorSecondary">#FFEB3B</item>
<item name="colorSecondaryVariant">#FFC107</item>
<item name="colorOnSecondary">#eeeeee</item>
<item name="colorSurface">#2196F3</item>
<item name="colorOnSurface">#eeeeee</item>
</style>
</resources>
我在反复试验中观察到的一件事是,如果我将主题父级从Leanback更改为Theme.AppCompat,则预览有效,但由于需要Leanback,所以我无法做到这一点。最后,除了应用程序一个以外的所有模块都是库模块apply plugin: 'com.android.library'
我的设置是Windows 10 PC,我正在使用Android Studio 4 Canary8。我也在Android Studio 4 Canary 2上进行了测试,结果相同。
编辑:解决方案在模块清单上设置默认主题,谢谢@Martin Zeitler
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.home">
<application android:theme="@style/AppTheme" />
</manifest>
您可以通过在AndroidManifest.xml
节点上添加android:theme
在application
中分配默认主题。这对于库模块也应该有效,因为它们有一个空的application
节点,可以在其中定义XML预览的默认主题。