具有不同基本主题的 Android 风格

标签 android android-gradle-plugin android-theme

我正在开发一个具有多种风格的 android 项目。

这很好用,我可以自定义应用程序的元素,例如颜色和字符串资源。

我想让一些风格基于 AppCompat 浅色主题,一些基于 AppCompat 深色主题。

我知道我可以通过重复所有 <items> 来做到这一点在我的风格和每种风格中,将主题设置为指向每个应用程序的自定义 list 中的每个主题,但这似乎有点过分了。

是否有一些简单的方法来设置这样的主题

    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">                
            <item name="colorPrimary">@color/primary_colour_tone1</item>
            ...lots more settings
    </style>

但是不是直接指向 Theme.AppCompat.NoActionBar 而是指向在每个 gradle 构建中可以不同设置的引用?

所以是这样的:

    <style name="AppTheme" parent="**Theme reference here**">                
            <item name="colorPrimary">@color/primary_colour_tone1</item>
            ...lots more settings
    </style>

我试过使用@string/theme_name 之类的东西,但它不起作用,有没有简单的方法可以做到这一点?

最佳答案

您可以为一种或多种风格的公共(public)资源(也称为源)定义 sourceSets,这意味着您不必为所有风格重复所有资源。

例如,您有 3 种口味。 flavor1flavor2 使用相同的主题,但 flavor3。然后你可以为公共(public)资源定义额外的源集,例如commonA(for flavor1, flavor2)和commonB(for flavor3):

...
android {
    ...
    productFlavors {
        flavor1{

        }
        flavor2{

        }
        flavor3{

        }
    }

    sourceSets.flavor1{
        res.srcDirs = ['res', 'src/commonA/res']
    }
    sourceSets.flavor2{
        res.srcDirs = ['res', 'src/commonA/res']
    }
    sourceSets.flavor3{
        res.srcDirs = ['res', 'src/commonB/res']
    }
}

您还应该创建文件夹 src/commanAsrc/commonB 然后将您的公共(public)资源放入它们的 res 文件夹中。

关于具有不同基本主题的 Android 风格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34068870/

相关文章:

android - 为什么 "Offline work"让 Gradle Build 在 Android Studio 中运行得更快?

android - 禁用即时运行时,Gradle 构建失败并显示 "Could not read path"

java - 构建失败 : Program type already present: com. facebook.ads.Ad

java - 通过反射改变 colorPrimary 和 colorAccent

android - 检测不同设备上不兼容的录音设置

android - 用户操作正在等待后台工作完成

android - 更改按钮的启用颜色而不更改禁用颜色

Android 工具栏中心标题和自定义字体

java - AsyncTask 返回值延迟

iphone - iPhone 和 Android 上的内存对齐