从API 25迁移到26时出现字体错误

时间:2018-08-29 07:24:25

标签: android android-8.0-oreo

当前,我正在将项目从 targetSdkVersion 25迁移到26 这是我的app.gradle:

android {
    compileSdkVersion 26
    buildToolsVersion "27.0.2"

    defaultConfig {
        minSdkVersion 17

        targetSdkVersion 26

        multiDexEnabled true

        versionCode versionMajor * 100000 + versionMinor * 1000 + versionPatch * 10 + versionHotfix
        versionName "${versionMajor}.${versionMinor}.${versionPatch}"
    }
}

但是在升级时,我反复遇到此错误:

String types not allowed (at 'font' with value 'Knockout-31').
Message{kind=ERROR, text=String types not allowed (at 'font' with value 'Knockout-31')., sources=[D:\Qdoba-Android\qdoba-android-app\app\build\intermediates\res\merged\internal\debug\values\values.xml:2466:21-32], original message=, tool name=Optional.of(AAPT)}

这是 fonts文件夹的一个片段:

enter image description here

请帮助。

2 个答案:

答案 0 :(得分:0)

根据Android文档link

  

Android 8.0(API级别26)引入了一项新功能,即XML字体,   它使您可以将字体用作资源。您可以在以下位置添加字体文件   res / font /文件夹将字体捆绑为资源。这些字体是   已在您的R文件中编译并在Android中自动可用   工作室。您可以在新的帮助下访问字体资源。   资源类型,字体。例如,要访问字体资源,请使用   @ font / myfont或R.font.myfont。

因此,您必须将所有字体移到res内的font文件夹中。 如果找不到字体目录,请在res目录中创建一个新的“ font”目录。

在视图中使用字体,如下所示,

android:fontFamily="@font/Knockout-31"

不使用属性android:fontFamily =“ ...”即可使用自定义字体系列的另一种方法

  1. 用于文本视图

    public class customFont extends android.support.v7.widget.AppCompatTextView{
    
    public customFont(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }
    
    public customFont(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }
    
    public customFont(Context context) {
        super(context);
        init();
    }
    
    public void init() {
        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "Knockout-31.otf");
        setTypeface(tf ,1);
    
    }
    }
    

您的带有自定义字体的文本视图

    <example.com.example.customFont
         android:id="@+id/textView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Text View" />

谢谢

答案 1 :(得分:0)

解决方案:将gradle插件更新到3.0以上