Android 带刻度的动态字体
有没有办法在build.gradle中声明变量(使用产品风格),可以在我的Android应用程序的styles.xml中替换?我想为我在应用程序中使用的每种产品风格提供自定义字体,如下所示: 还有一些样式取决于变量的值:Android 带刻度的动态字体,android,gradle,android-typeface,Android,Gradle,Android Typeface,有没有办法在build.gradle中声明变量(使用产品风格),可以在我的Android应用程序的styles.xml中替换?我想为我在应用程序中使用的每种产品风格提供自定义字体,如下所示: 还有一些样式取决于变量的值: <style name="my-android-style"> <item name="font_file_name">MY_VARIABLE_NAME-regular.ttf</item> </style> 有没有办
<style name="my-android-style">
<item name="font_file_name">MY_VARIABLE_NAME-regular.ttf</item>
</style>
有没有办法面对这个问题?
提前谢谢
有没有办法在build.gradle中声明变量(使用产品风格),可以在我的Android应用程序的styles.xml中替换
不可以。但是您可以在声明字体的
styles fonts.xml
文件中使用不同版本的字体。在main
中设置默认值,并根据需要在其他产品样式中覆盖该文件。将尽可能小的样式信息分为styles-fonts.xml
(或任何您想命名的名称),这样您就可以最大限度地减少构建变量之间的冗余。就像您想做的那样,遵循CommonWare的答案,这是不可能的。但是你可以用另一种方式:对于我的白标产品,我创建了一个名为branding.xml的文件(在values文件夹中),在这个文件中,我设置了从根项目构建不同产品时需要注意的所有事项。(当然,您可以使用您想要的名称调用此文件。此文件还必须包含在根项目中)
我要开始给你看我的gradle文件的一小部分,好吗
signingConfigs {
rootproject{
storeFile file("rootprojec_keystore") //Path to the keystore file
keyAlias "aliasname"
storePassword "xxxxxxxxx"
keyPassword "xxxxxxx"
}
whitelabel1 {
storeFile file("whitelabels/whitelabel1_keystore") //Path to the keystore file
keyAlias "whitelabel_1"
storePassword "xxxxxxxx"
keyPassword "xxxxxxx"
}
}
productFlavors {
rootproject{
applicationId = "com.rootproject.android"
signingConfig = signingConfigs.rootproject
}
whitelabel1{
applicationId = "com.whitelaber1.android"
signingConfig = signingConfigs.whitelabel1
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src','test']
resources.srcDirs = ['src','test']
aidl.srcDirs = ['src','test']
renderscript.srcDirs = ['src','test']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
whitelabel1{
res.srcDirs = ['whitelabels/whitelabel1/res']
}
}
在最后一个块中(sourceset)是您拥有密钥的位置。对于我的白标签,我使用的是一个完整的res文件夹,但您甚至可以只使用我认为类似的文件:whitelabels/whitelabel1/res/values/branding.xml
好吗?现在我们知道编译器将如何为您使用不同的文件/文件夹
现在我们将描述branding.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="kind_font">assets/fonts/nameofthefont.ttf</integer>
</resources>
您应该使用branding.xml文件中描述的变量名称进行修改:
String fontName = ((String)getResources().getString(R.bool.kind_font)
这就是全部…哈哈哈…如果它是有效的,请投票给我…并且快乐地编码 谢谢你,伙计!你让我开心!用普通、中号、粗体等字体的名称来表示字符串值怎么样?这会比你的方法更有效吗?
Typeface myTypeface = Typeface.createFromAsset(getContext().getAssets(), "fonts/"+fontName);
String fontName = ((String)getResources().getString(R.bool.kind_font)