将 android:fontFamily 传递给 Android 中的自定义视图

doo*_*ker 3 android android-layout kotlin

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

例如:

<MyCustomView android:fontFamily="@font/roboto_medium"/>
Run Code Online (Sandbox Code Playgroud)

然后在 MyCustomView.kt 中:

override fun onCreateView(...) {

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

}
Run Code Online (Sandbox Code Playgroud)

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

Pav*_*kov 9

doohickey_maker 的答案确实有效。

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

在 attrs.xml 中

<declare-styleable name="LoadingButton">
<attr name="android:fontFamily" />
Run Code Online (Sandbox Code Playgroud)

在自定义视图中

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