繁体   English   中英

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

[英]Android flavors with different base themes

我有一个我正在研究的具有多种口味的android项目。

这工作正常,我可以自定义应用程序的元素,如颜色和字符串资源。

我想要这样做,以便一些口味基于AppCompat灯主题,一些基于AppCompat黑暗主题。

我知道我可以通过重复我的风格中的所有<items>并在每个风格设置主题指向每个应用程序的自定义清单中的每个应用程序,但这似乎有点过分。

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

    <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这样的东西,但这不起作用,是否有一种简单的方法可以做到这一点?

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

例如,你有3种口味。 flavor1flavor2使用相同的主题但flavor3 然后,你可以定义额外来源为集公共资源,如commonA (用于flavor1,flavor2)和commonB (用于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然后将您的公共资源放入其res文件夹中。

更好的方法来创建一个基本样式,包含默认值,然后在主源样式和现在样式扩展它(但可能什么都不做)。 在味道中,您可以扩展它并覆盖您需要的东西。

仅供参考,以防任何人正在寻找一种简单的方法来实现这一目标。

在你的清单中,将你的主题更新为这样的......

android:theme="${appTheme}"

然后在你的app.gradle做这样的事......

productFlavors {
    flavorA{
        manifestPlaceholders = [appTheme: "@style/AppThemeA"]
    }
    flavorB{
        manifestPlaceholders = [appTheme: "@style/AppThemeB"]
    }
}

然后你可以使用你想要的任何样式,它们将与所选的风格相关联。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM