在Android O中使用XML中的字体

9

Android O在新版的Android Studio 3.0中提供了字体目录。但是,当我把字体文件放入字体目录并运行项目时,会出现字体目录中字体文件错误的问题。

/home/ttuser4/Downloads/fontPractice/app/src/main/res/font/Dancing_Script.ttf: 错误:文件名必须以.xml结尾


你可以清楚地看到错误。你会明白问题出在哪里。 - jack jay
错误提示说字体目录中的文件扩展名应该是 .xml,但是一个字体文件怎么可能有 .xml 扩展名呢? - Akshaykumar Singh
根据 https://developer.android.com/preview/features/working-with-fonts.html ,我们可以在字体目录中添加普通字体文件。他们正在这样做。 - Akshaykumar Singh
3
所有资源名称只允许使用以下字符:a...z_.0...9,包括字体。 - Phantômaxx
问题出在Gradle插件版本、Android插件和支持库版本上。请确保您的配置如下:
  1. 您需要安装Android Studio 3.0+和Android SDK 8.0(API 26+)。
  2. 需要使用Gradle插件版本3.0.0-beta4或更高版本,以及Android插件版本4.1。
  3. 建议使用支持库版本25.0+,以便在Studio中预览字体。
- Surendra Kumar
4个回答

13

我也遇到了类似的问题。为了解决这个问题,我按照以下步骤操作:

  1. 将Android Studio更新到最新的canary版本。
  2. project-dir/gradle/gradle-wrapper.properties中更改distributionUrl为最新的gradle分发URL(您可以从此处获取gradle的最新版本可用性),以更新用于构建的gradle版本,如下所示:

    distributionUrl=https://services.gradle.org/distributions/gradle-4.1-milestone-1-all.zip

  3. 然后在根build.gradle中将com.android.tools.build:gradle版本更新为最新版本,如下所示。(注意:下面提到的版本是回答发布时的最新版本。版本可能会在未来更改。因此请注意。)
buildscript {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com'
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-alpha4'
    }
}
allprojects { repositories { jcenter() maven { url 'https://maven.google.com' } } }
task clean(type: Delete) { delete rootProject.buildDir }
  1. 同步、清理和更新项目。

对我有用。请在评论中告诉我。


5
请注意,如果您没有使用Android Studio 3.0,则此操作将失败。 - Teffi
@teffi 根据问题描述,用户在使用Android Studio 3.0时遇到了问题。因此,答案是基于这个版本编写的。 - Mahendran Sakkarai
这个答案对我有用,使用AS3 + 完全清理 + 重建,谢谢! - Ignacio Tomas Crespo

2

我假设你正在使用较旧的构建工具插件,因此它不知道res/font和新字体功能。

我曾经遇到过同样的问题,我将gradle构建工具更新到2.4.0-alpha7版本,

但是在构建时出现了错误消息,然后我不得不设置环境变量。

launchctl setenv ANDROID_DAILY_OVERRIDE <your-value-on-error-message>

1
假设您已经打开了Android Studio项目。
  1. 右键单击 res 目录,选择 New > Android Resource Directory

  2. 选择资源目录“font”。

enter image description here

  1. 将您的字体名称更改为“dancing.ttf”(大写名称会生成错误)。我使用了“Pacifico-Font”,并收到以下错误消息 -

Error:Execution failed for task ':app:mergeDebugResources'. res/font/Pacifico-Font.ttf: Error: 'P' is not a valid file-based resource name character: File-based resource names must contain only lowercase a-z, 0-9, or underscore

当我将其更改为pacifico.ttf时,它可以工作。

  1. 将字体添加到字体文件夹中。
  2. 运行您的应用程序。

我在Android Studio 3.0预览版上使用了“pacifico.ttf”字体,按照完全相同的步骤进行操作,对我有效。

enter image description here

如果你遇到任何错误,请先清理项目,然后再次运行它。
如果你仍然遇到问题,请告诉我。

这些步骤没有帮助。也许你应该再试一次。 - Mayank Bhatnagar
这次你在哪里出错了?特别是哪一步? - Kunal Chawla
我能在布局设计的预览中看到字体的变化,但是当我在手机上运行时,字体又恢复为默认值,并且我收到了构建gradle无法找到字体、字体样式和字体粗细的消息。你能否分享一下gradle的设置呢? - Sanved
你的手机上运行着 Android O 吗?因为只有那个操作系统支持这些字体。Android 已经发布了一个支持库来支持更低版本,可以在这里查看。 - Kunal Chawla
.../app/src/main/res/font/fontname.ttf:错误:文件名必须以.xml结尾 - 它无法工作。 - Peter Samokhin

-2

你可以以任何格式添加字体,但是你必须创建一个Font Family的XML文件才能在XML布局文件中应用这些字体。字体族是一个包含多个字体文件及其样式和粗细详情的XML文件。你可以将字体族作为一个整体来访问。

要创建一个字体族,在Android Studio中执行以下步骤:

  1. 右键单击字体文件夹,然后选择新建 > 字体资源文件。新建资源文件窗口将出现。

  2. 输入文件名,然后单击“确定”。新的字体资源 XML 将在编辑器中打开。

  3. 将每个字体文件、样式和权重属性封装在 元素中。以下 XML 示例演示了如何在字体资源 XML 中添加与字体相关的属性:

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

然后,您可以将此字体系列添加到包含文本的布局中的任何元素中。就像在这个例子中应用于TextView一样。

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/lobster"/>

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