像 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
库。
在 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>
新解决方案
在 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
旧答案
感谢雅各布·埃里克森
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>
支持库 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
我建议您使用自定义库,例如 Android-RobotoTextView 或 Calligraphy。使用其中之一,您可以使用属性在 xml 中设置视图的字体,以便您可以放入 styles.xml 。它们适用于 4.0 之前的 Android 版本
font_textStyle_medium
<!--suppress AndroidDomInspection -->
以避免 Android Studio 发出警告,提示您使用整数而不是textStyle
可用的标志之一。