安卓:为不同的应用程序风格使用不同的字符串

8
我有一个安卓应用程序,有两个不同的口味/变体。如何为每种口味(例如应用名称、按钮标签等)设置不同的字符串?
目前我的做法是,使用Gradle创建了两个口味。具体来说,我创建了一个flavor1_res和一个flavor2_res文件夹,并在里面放置特定于口味的资源。
具体而言,我在每个文件夹下放置了一个strings.xml文件。每个文件包含相同的字符串标签,但字符串的值不同。应用程序可以通过命令行进行构建(例如使用"gradlew assembleFlavor1"),但在Android Studio中,我的字符串未被识别,我收到所有这些编译错误。
还有其他的方法吗?如何使Android Studio识别这两个strings.xml文件?(我已经将相应的文件夹添加为源文件夹)。
谢谢,
Thomas
3个回答

10
您可以在build.gradle文件中像这样声明资源字符串:
productFlavors {
    devel {
        resValue 'string', 'fancy_name', 'Development App'
    }
    prod {
        resValue 'string', 'fancy_name', 'Production App'
    }
}

现在根据您构建的版本不同,'fancy_name'字符串将是'Development App'或'Production App'。我经常使用这个。


2
谢谢Alexis的回答!我猜当我发布这个问题时,这个功能还没有可用。再次感谢! - Thomas Kaliakos
你可以使用context.getString(R.string.fancy_name)来获取它。 - hushed_voice
我该如何在AndroidManifest中使用它? - ghita
1
那对于我们的应用程序有72种不同语言的人来说怎么办? - user14536109

3
如果我理解问题正确的话,Android Studio(AS)没有正确识别资源文件夹。如果在build.gradle(app)中有以下内容: ```groovy sourceSets { main { res.srcDirs = ['src/main/res'] } } ``` 那么AS应该能够正确地识别资源文件夹。
productFlavors {
    free {
        applicationIdSuffix ".free"
        versionNameSuffix "-free"
    }
    paid {
        applicationIdSuffix ".paid"
        versionNameSuffix "-paid"
    }
}

在AS中有一个名为“构建变体”的面板,可以选择免费或付费。因此,如果您选择免费,AS将识别免费文件夹下的资源文件。


0
好吧,这确实很久远了,但无论如何我还是会尝试一下。我认为你可以在主文件夹中放置一个strings.xml来定义每个字符串的值。它们可以为空:
<string name="myAwesomeString1"></string>

那么Android Studio就知道该字符串存在,当您构建时,它将从口味文件中获取该值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接