如何为 android 应用程序设置自定义字体?

How to set a custom font for android application?

我似乎无法在我的应用程序中将标准 android 字体更改为其他字体。我正在用 Kotlin 编写我的应用程序,我正在使用 Anko 进行布局。我试过:

typeface = Typeface.create()
typeface = Typface.createFromAsset(assets, "font/font_name")
setTypeface(Typeface.createFromAsset(assets, "font/font_name"))

感谢您的帮助。

我们可以为自定义 textView 创建 class。例如我们需要带有 roboto font

的 textview
class RobotoTextView(context: Context?, attrs: AttributeSet?) : AppCompatTextView(context, attrs) {
    init {
        val typeface = Typeface.createFromAsset(getContext().assets, "font/roboto.ttf")
        if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB ||
                android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.HONEYCOMB_MR2) {
            setTypeface(typeface)
        }
    }
}

然后我们可以在每个 xml 布局上使用它

<com.packagename.RobotoTextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World"/>

试试这个,来自 this tutorial from SEGUN

val myCustomFont : Typeface? = ResourcesCompat.getFont(this, R.font.my_font)
myView.typeface = myCustomFont

注意: 您需要在您的项目中下载 .ttf 字体 - 而不仅仅是 .xml 可下载字体.

我在 Android Studio 3.1 Canary with Kotlin 上遇到了同样的问题

解决方法如下:对于font/lobster_regular.ttf文件

var typeFace: Typeface? = ResourcesCompat.getFont(this.applicationContext, R.font.lobster_regular)

示例:

private var _customFontTextView: TextView? = null
private var _typeFace:           Typeface? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    this.setContentView(R.layout.activity_main)

    this._initializeResources()
    this._initializeGUI()
}

private fun _initializeResources() {
    this._customFontTextView = this.findViewById(R.id.custom_font_text_view)
    this._typeFace           = ResourcesCompat.getFont(this.applicationContext, R.font.lobster_regular)
}

private fun _initializeGUI() {
    this._customFontTextView!!.setTypeface(this._typeFace, Typeface.NORMAL)
}

您还可以使用可下载字体做更多事情,这是来自 Google 的文章:https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts.html

你可以试试这个,来自我的工作代码(在 Kotlin 中)

如果您在其他 Class 文件中,则使用此文件

var typeFaceBold: Typeface? =
    this.getApplicationContext()?.let { ResourcesCompat.getFont(it, R.font.sans_serif_bold) }
    tvAnonymousText.typeface = typeFaceBold

如果你在Activity中使用它,那么你可以这样写

var typeFaceBold: Typeface? = ResourcesCompat.getFont(this.applicationContext, R.font.sans_serif_bold) }
tvAnonymousText.typeface = typeFaceBold

这是一个很好的捷径:
1- 在 res 文件夹中创建一个名为 font 的文件夹。 2- 然后将您的字体文件放入您创建的 font 文件夹中。 (我们假设您的字体文件名为 sample_font.ttf
3- 所以现在在名为 sample.xml 的字体文件夹中创建一个 xml 文件并将以下代码放入其中

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

4- 现在转到并打开 res/values/styles.xml 然后将以下行代码添加到主样式(常用名称为 AppTheme)

<item name="fontFamily">@font/sample</item>  //put name of xml file in the font folder

现在 运行 您的应用程序,您会看到您的应用程序字体已更改。