TextView上的addFontWeightStyle NoSuchMethodException

Ank*_*iya 47 android material-design androidx

我正在为我的项目使用Androidx库,并且我想将字体设置为textview,所以当我将任何字体应用于任何Textview组件时,系统给我的

TypefaceCompatApi21Impl:java.lang.NoSuchMethodException java.lang.NoSuchMethodException:addFontWeightStyle [class java.lang.String,int,boolean]

这种类型的错误在运行时但应用程序没有崩溃.

那么如何克服这个错误呢.

注意:没有android x依赖项它将正常工作.

在我的代码下面:

<androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/menu_tv_title"
        style="@style/font_work_sans_medium"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:maxLines="1"
        android:ellipsize="end"
        android:paddingEnd="@dimen/_12sdp"
        android:paddingStart="@dimen/_12sdp"
        android:textColor="@android:color/black"
        android:textSize="17sp"
        android:gravity="center"
        tools:text="title"
        tools:visibility="gone"/>
Run Code Online (Sandbox Code Playgroud)

这是风格

<style name="font_work_sans_medium" parent="@android:style/TextAppearance.Small">
    <item name="android:fontFamily">@font/work_sans_medium</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我也像这样以编程方式设置字体

var typeFace: Typeface? = ResourcesCompat.getFont(context, R.font.work_sans_bold)
    getTitleView().setTypeface(typeFace, Typeface.NORMAL)
Run Code Online (Sandbox Code Playgroud)

仍然收到此错误

Ank*_*iya 27

对于一些研究,我发现解决方案可能对我有帮助,实际上我使用的是alpha依赖,这是不稳定所以我降级了Android的lib版本

我正在使用这种依赖

 implementation 'androidx.core:core-ktx:1.1.0-alpha04'
 implementation 'androidx.appcompat:appcompat:1.1.0-alpha02'
Run Code Online (Sandbox Code Playgroud)

你应该使用它代替

implementation 'androidx.core:core-ktx:1.0.1'
implementation 'androidx.appcompat:appcompat:1.0.2'
Run Code Online (Sandbox Code Playgroud)


Per*_*abs 16

该问题已经报告给Android团队,似乎是未来版本的修复:

https://issuetracker.google.com/issues/124274577


Dur*_*aco 5

我从xml文件中删除了这一行,现在可以正常使用了

android:textStyle="bold"
Run Code Online (Sandbox Code Playgroud)

关于addFontWeightStyle方法,该方法在API21 Impl中引发NoSuchMethodException

  • 这确实可行,但这不是解决方案,因为问题是我们确实要使用fontStyle。 (3认同)
  • 我没有使用textStyle (2认同)

Yav*_*nov 5

只需仔细阅读堆栈跟踪-这是AndroidX的问题。似乎 androidx.core.graphics.TypefaceCompatApi21Impl()尝试通过反射addFontWeightStyle(lass java.lang.String, int, boolean)从框架内部的某个内部静态解析带有签名的方法android.graphics.FontFamily...事实证明该方法不存在。我也有同样的问题androidx.appcompat.widget.AppCompatAutoCompleteTextView。在Google修复之前,我们无能为力。