ChatGPT解决这个技术问题 Extra ChatGPT

我如何指定例如。 Styles.xml 中的 Roboto-Medium 或 Roboto-Black

How to change fontFamily of TextView in Android 这样的帖子表明,您可以在 Android 4.2 的 styles.xml 中指定的 Roboto 字体变体归结为以下内容:

常规的

斜体

大胆的

加粗斜体

浅斜体

薄的

细斜体

浓缩正则

浓缩斜体

浓缩粗体

浓缩粗斜体

这就排除了使用例如样式设置 TextViews 的能力。 Roboto-Medium 或 Roboto-Black 字体。

但是,为什么 Google 会添加不能用于设置 TextView 样式的系统范围字体呢?当然,必须有某种方法可以从 styles.xml 中指定所有 Roboto 字体(即,不必将字体作为资产嵌入并在代码中创建自定义 TextView)——但是如何?

据我所知,您必须编写自定义 TextView 或者您必须使用 fonts 库。

r
rciovati

在 Android 5.0 上,您可以使用 sans-serif-medium 设置 Roboto Medium。

此解决方案取自 Google iosched 2014,在 v21 之前的 Android 上使用 sans-serif

值/样式.xml

<style name="MyStyle">
    <item name="android:fontFamily">@string/font_fontFamily_medium</item>
</style>

值/字体.xml

<string name="font_fontFamily_medium">sans-serif</string>

值-v21/fonts.xml

<string name="font_fontFamily_medium">sans-serif-medium</string>

别忘了font_textStyle_medium
请注意,您必须添加 <!--suppress AndroidDomInspection --> 以避免 Android Studio 发出警告,提示您使用整数而不是 textStyle 可用的标志之一。
A
Abror Esonaliev

新解决方案

Google I/O '17 之后,您可以在 res/font 文件夹中创建多个字体系列

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
    app:font="@font/roboto_light"
    app:fontStyle="normal"
    app:fontWeight="300" />
<font
    app:font="@font/roboto_bold"
    app:fontStyle="normal"
    app:fontWeight="700" />

</font-family>

你可以在任何地方使用

 <style name="AppTheme.DefaultTextView" parent="android:style/Widget.TextView">
    <item name="android:textColor">@color/colorBlack</item>
    <item name="android:fontFamily">@font/font_family_roboto</item>
</style>

https://i.stack.imgur.com/G0cp4.png

旧答案

感谢雅各布·埃里克森

original answer

android:fontFamily="sans-serif"           // roboto regular
android:fontFamily="sans-serif-light"     // roboto light
android:fontFamily="sans-serif-condensed" // roboto condensed
android:fontFamily="sans-serif-black"     // roboto black
android:fontFamily="sans-serif-thin"      // roboto thin (android 4.2)
android:fontFamily="sans-serif-medium"    // roboto medium (android 5.0)

很有型:

<style name="AppTheme.DefaultTextView" parent="android:style/Widget.TextView">
    <item name="android:textSize">@dimen/text_view_text_size</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:fontFamily">sans-serif-light</item>
    <item name="android:textStyle">normal</item>
</style>

在应用程序主题中:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/gray</item>
    <item name="android:textViewStyle">@style/AppTheme.DefaultTextView</item>
</style>

我收到一个错误:必须声明元素“font-family”
A
Andrew Orobator

支持库 26 引入了 using fonts in XML,它向后兼容 Android API 14。

要将字体添加为资源,请在 Android Studio 中执行以下步骤:

右键单击 res 文件夹并转到新建 > Android 资源目录。将出现新建资源目录窗口。在资源类型列表中,选择字体,然后单击确定。注意:资源目录的名称必须是字体。

https://i.stack.imgur.com/GeXtb.png

在字体文件夹中添加您的字体文件。下面的文件夹结构生成 R.font.dancing_script、R.font.lobster 和 R.font.typo_graphica。

https://i.stack.imgur.com/x2taz.png

双击字体文件以在编辑器中预览文件的字体。

https://i.stack.imgur.com/FrK6K.png

要为 TextView 设置字体,请在布局 XML 文件中,将 fontFamily 属性设置为您要访问的字体文件。

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

Android Studio 布局预览允许您预览 TextView 中设置的字体。

https://i.stack.imgur.com/uKbzf.png

要将字体添加到样式中,请打开 styles.xml,并将 fontFamily 属性设置为要访问的字体文件。

<style name="customfontstyle" parent="@android:style/TextAppearance.Small">
<item name="android:fontFamily">@font/lobster</item>

如果您不想在应用程序中捆绑字体,您可以随时查看 Downloadable Fonts


这很有帮助,但是 OP 询问了有关使用 Roboto-Medium 等系统字体的问题。当字体已经随系统一起提供时,您当然不必将 TTF 文件捆绑到您的应用程序中或下载它们?
在这里,在最初的帖子发布 7 年后,我也在为此苦苦挣扎……
R
Rampo

我建议您使用自定义库,例如 Android-RobotoTextViewCalligraphy。使用其中之一,您可以使用属性在 xml 中设置视图的字体,以便您可以放入 styles.xml 。它们适用于 4.0 之前的 Android 版本