【问题标题】:cannot resolve method 'getFont(?)'无法解析方法“getFont(?)”
【发布时间】:2017-03-31 13:42:16
【问题描述】:

正如documentation 所说:

Android O 允许您通过添加字体文件将字体捆绑为资源 在 res/font/ 文件夹中。

结果:

您可以使用 getFont(int) 方法检索字体,您可以在其中 需要传递你想要的字体的资源标识符 取回。此方法返回一个 Typeface 对象。这将编码 字体的第一个粗细或样式变体(如果它是字体) 家庭。然后您可以使用 Typeface.create(typeface, style) 方法 检索特定样式。

注意:TextView 已经为您完成了这项工作。

字体字体 = getResources().getFont(R.font.myfont); textView.setTypeface(字体);

不幸的是,当我使用上述代码时,我收到以下错误:

cannot resolve method 'getFont(?)'

以前我做过以下事情:

Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/myfont.ttf");

但是现在当我尝试在 assets 文件夹中创建 fonts 文件夹时,它会自动跳转到 res 文件夹中。

我正在使用 android studio 2.3。提前感谢您的帮助。

【问题讨论】:

  • 你怎么打电话给getFont?你有一个有效的Resources 对象吗?
  • 您的目标是开发者预览版吗?
  • @njzk2 我不知道。每当我尝试在 assets 文件夹中创建字体文件夹时,它都会跳出并进入 res 文件夹。
  • @Submersed 我刚刚创建了一个新项目,对开发者预览不太了解。
  • 我能够正常使用资产目录并使用 getAssets() 方法。我使用操作系统(在本例中为 Linux)手动创建它并复制字体。允许我支持几年前但不一定古老的 Android 版本!

标签: java android


【解决方案1】:

使用支持库 26 中的此方法。

ResourcesCompat.getFont(context, R.font.your_font);

来源: https://developer.android.com/reference/android/support/v4/content/res/ResourcesCompat.html

【讨论】:

  • 当我开始这个项目时,我没有任何所谓的“上下文”,它建议创建Context context,但我没有任何东西可以传递给它。
【解决方案2】:

我知道这可能会迟到,但这里是 documentation,用于将下载的字体与 26 之前的 API 版本(兼容模式)一起使用。

基本上,您必须定义字体描述,如下所示(使用两个属性 - app 和 android),然后使用 ResourceCompat 类以编程方式访问您的字体:

Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
        <font android:fontStyle="normal" android:fontWeight="400" 
            android:font="@font/myfont-Regular"
            app:fontStyle="normal" app:fontWeight="400"
            app:font="@font/myfont-Regular"/>
        <font android:fontStyle="italic" android:fontWeight="400"
            android:font="@font/myfont-Italic"
            app:fontStyle="italic" app:fontWeight="400"
            app:font="@font/myfont-Italic" />
</font-family>

干杯!

【讨论】:

    【解决方案3】:

    试试这样的

    Typeface yourFont = Typeface.createFromAsset(getAssets(), "fonts/yourFont.ttf");
    

    【讨论】:

    • 感谢您的回答,但我已经更新了问题。我曾经这样做,但我无法在 assets 文件夹中创建 fonts 文件夹,因为它会自动在 res 文件夹中创建 fonts 文件夹
    【解决方案4】:

    我还没有使用它,但据我所知,只有将 Android Studio 更新到 2.4 才能定位 Android O 设备。您还需要将您的 SDK 更新到最新版本。因为正如文档所说,getFont() 在 Android O 中可用。

    【讨论】:

    • 感谢您的回答。我正在使用 compileSdkVersion 25 buildToolsVersion “25.0.2”。不幸的是,SDK 管理器中目前没有可用的更新。
    • 让你的工作室从金丝雀频道下载更新,然后你可以下载工作室2..4预览版3。之后你可以下载SDK工具版本26.0.0
    • 谢谢,我目前正在下载新的更新,并将让大家知道结果。
    【解决方案5】:

    由于它是在 O 中发布的新方法,因此您必须将开发者预览版作为构建目标才能使用它。欲了解更多信息,请查看此link

    【讨论】:

      【解决方案6】:

      由于我无法直接从 Android Studio 创建 fonts 文件夹,我使用 windows explorer 打开项目文件夹并创建了 fontsapp\src\main\assets\ 文件夹中,并将我的字体文件粘贴到那里。

      正如许多其他人在答案中所建议的那样,我必须使用 Android Studio 2.4 Canary 才能使用 Android O 的新功能。 documentation 声明:

      只有 Android Studio 2.4 包含对所有新开发者的支持 Android O 提供的功能。所以你需要获取 canary Android Studio 2.4 版本开始使用 Android O SDK。但 您仍然可以安装稳定版本的 Android Studio。

      【讨论】:

        【解决方案7】:

        我这样做的方式是这样的:

        private TextView textView;
        
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
        .
        .
        .
        .
        
        textView = (TextView) findViewById(R.id.textView);
        Typeface mTextView = Typeface.createFromAsset(getAssets(),"fonts/your_font_style.ttf");
        textView.setTypeface(mTextView);
        

        希望这会对你有所帮助。

        【讨论】:

        • 这看起来是最适合我的,但它声称找不到路径。默认文件夹名称是“font”,我只是尝试添加“roboto_regular.ttf”作为测试。然后它给java.lang.RuntimeException: Font asset not found font/roboto_regular.ttf
        • @Liggiluff 您必须将其添加到 Assets 文件夹下,例如 assets/font/roboto_regular.ttf 我想您已将其添加到 res/font/roboto_regular.ttf
        【解决方案8】:

        字体文件夹应该在assets文件夹下,所以尝试在那里创建文件夹。

        【讨论】:

        • 字体文件夹自动跳出assets文件夹,进入res文件夹
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-15
        • 2015-06-10
        • 2019-08-28
        • 2019-10-10
        • 2019-06-13
        • 2017-11-13
        相关资源
        最近更新 更多