【问题标题】:passing android:fontFamily to custom view in Android将 android:fontFamily 传递给 Android 中的自定义视图
【发布时间】:2020-04-18 21:36:28
【问题描述】:

如何在res/font 文件夹中传递字体系列,例如@font/roboto_medium,作为XML中Android中自定义视图的属性,然后在自定义视图里面读入Typeface对象?这是对文本进行自定义图形渲染所必需的。

例如:

<MyCustomView android:fontFamily="@font/roboto_medium"/>

然后在 MyCustomView.kt 中:

override fun onCreateView(...) {

  // parse android:fontFamily attribute into Typeface object
  val typeface: Typeface = ???  

}

Typeface 函数似乎都不支持这一点。其中一个接受 assets 文件夹内的自定义字体,另一个接受直接嵌入在 Java/Kotlin 代码中的资源字体整数,例如R.font.roboto_medium.

【问题讨论】:

  • 您好,欢迎来到 StackOverflow!您可能想在此处添加一些有关您已经尝试过的内容以及遇到困难的地方的详细信息。网上有很多关于如何在自定义视图中创建和使用自定义 XML 属性的教程。如果您展示您为制定解决方案所付出的努力以及您遇到困难的确切原因,您通常会发现在这里您会得到更好、更有帮助的回复。
  • 我到处寻找,包括其他 Stack Overflow 线程,但找不到可以接受字体系列 XML 属性的字体函数。

标签: android android-layout kotlin


【解决方案1】:

doohickey_maker 的回答真的很管用。

在layout.xml中需要添加android:fontFamily="@font/name"

在 attrs.xml 中

<declare-styleable name="LoadingButton">
<attr name="android:fontFamily" />

在自定义视图中

   int fontFamilyId = typedArray.getResourceId(R.styleable.LoadingButton_android_fontFamily, 0);
   if (fontFamilyId > 0) {
       mButton.setTypeface(ResourcesCompat.getFont(getContext(), fontFamilyId));
   }

【讨论】:

  • 如果你想完全自定义你可以这样做:
  • 在 CustomView val fontFamilyId: Int = a.getResourceId(R.styleable.LoadingButton_loadingFont, 0) if (fontFamilyId > 0) { mButton.setTypeface(ResourcesCompat.getFont(getContext(), fontFamilyId)) }
【解决方案2】:

使用TypedArray.getResourceId将字体家族属性转换为ID,然后使用ResourcesCompat.getFont(context, fontId)得到Typeface

【讨论】:

    【解决方案3】:

    欢迎来到 SO。 如果您想创建自定义视图然后传递字体,请查看此链接:

    https://medium.com/@nikk.dave/android-apply-custom-font-from-xml-e7ed5fada019

    如果您只想在 XML 文件中设置自定义字体,请查看此链接了解: https://www.spritle.com/blogs/2017/11/03/set-custom-font-xml-file/

    关于您的第二个问题,我不知道您为什么需要字体,但对于 android 视图来说这很容易: textview.getTypeface();

    【讨论】:

    • 这些链接都没有回答如何将@font(res 文件夹内的字体)传递给自定义视图,然后从自定义视图中读取它。您发布的第一个链接从资产文件夹中读取字体,第二个链接不涉及自定义视图。
    • 不幸的是,您的问题的直接答案是它不能以您想要的方式完成。这个答案提供了一些可用的不同选择的指针。
    猜你喜欢
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-08
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多