Android 带刻度的动态字体

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> 有没有办

有没有办法在build.gradle中声明变量(使用产品风格),可以在我的Android应用程序的styles.xml中替换?我想为我在应用程序中使用的每种产品风格提供自定义字体,如下所示:

还有一些样式取决于变量的值:

<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)