代码之家  ›  专栏  ›  技术社区  ›  Ankit Dubariya

文本视图上的addFontWeightStyle NoSuchMethodException

  •  0
  • Ankit Dubariya  · 技术社区  · 5 年前

    我在用 字体 文本视图 组件比系统给我的多

    java.lang.NoSuchMethodException:addFontWeightStyle[类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"/>
    

    这是款式

    <style name="font_work_sans_medium" parent="@android:style/TextAppearance.Small">
        <item name="android:fontFamily">@font/work_sans_medium</item>
    </style>
    

    程序化 这样地

    var typeFace: Typeface? = ResourcesCompat.getFont(context, R.font.work_sans_bold)
        getTitleView().setTypeface(typeFace, Typeface.NORMAL)
    

    0 回复  |  直到 5 年前
        1
  •  27
  •   Ankit Dubariya    5 年前

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

    我在用这个 附属国

     implementation 'androidx.core:core-ktx:1.1.0-alpha04'
     implementation 'androidx.appcompat:appcompat:1.1.0-alpha02'
    

    implementation 'androidx.core:core-ktx:1.0.1'
    implementation 'androidx.appcompat:appcompat:1.0.2'
    
        2
  •  16
  •   Pragati Singh    5 年前

    该问题已报告给 Android team 对于未来的发行版来说,这似乎是一个修复方案:

    根据以下版本的注释#25

    implementation 'androidx.appcompat:appcompat:1.1.0-alpha03'
    implementation 'androidx.core:core-ktx:1.1.0-alpha05'
    
        3
  •  5
  •   Java wanna bee    5 年前

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

    android:textStyle="bold"
    

    addFontWeightStyle

        4
  •  5
  •   Yavor Ivanov    5 年前

    仔细阅读堆栈跟踪-这是AndroidX的问题。看来 androidx.core.graphics.TypefaceCompatApi21Impl() addFontWeightStyle(lass java.lang.String, int, boolean) 从一些内部到框架类 android.graphics.FontFamily androidx.appcompat.widget.AppCompatAutoCompleteTextView . 在谷歌修复之前我们无能为力。

        5
  •  3
  •   lior_13    5 年前

    显然,当预期的方法是公开的(或者如果不存在的话,我相信不是这样)时,它会发生,而不是按照Java.java方法(请看下面的注释):

    private Method getMethod(String name, Class<?>[] parameterTypes, boolean recursivePublicMethods)
            throws NoSuchMethodException {
        if (name == null) {
            throw new NullPointerException("name == null");
        }
        if (parameterTypes == null) {
            parameterTypes = EmptyArray.CLASS;
        }
        for (Class<?> c : parameterTypes) {
            if (c == null) {
                throw new NoSuchMethodException("parameter type is null");
            }
        }
        Method result = recursivePublicMethods ? getPublicMethodRecursive(name, parameterTypes)
                                               : getDeclaredMethodInternal(name, parameterTypes);
        ***// Fail if we didn't find the method or it was expected to be public.***
        if (result == null ||
            (recursivePublicMethods && !Modifier.isPublic(result.getAccessFlags()))) {
            throw new NoSuchMethodException(name + " " + Arrays.toString(parameterTypes));
        }
        return result;
    }
    

    我相信这是Androidx里的某种虫子。

        6
  •  1
  •   Shahid Khan    5 年前

    试试这个:

     <style name="CutsomFontTextView" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:fontFamily">@font/yourfont</item>
    </style>
    

    <androidx.appcompat.widget.AppCompatTextView
        android:id="@+id/menu_tv_title"
        android:theme="@style/CutsomFontTextView"
        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"/>
    
        7
  •  1
  •   Tejas Pandya    5 年前

    你的风格父母是 @android:style/TextAppearance.Small

    <item name="textSize">14sp</item>
            <item name="textColor">?textColorSecondary</item>
    

    所以错误是正确的。那种风格没有 fontFamily 里面的财产。

    <style name="font_work_sans_medium" parent="Base.Theme.AppCompat.Light.DarkActionBar">
     <item name="android:fontFamily">@font/work_sans_medium</item>
    </style>
    
        8
  •  1
  •   Franrc    5 年前

    当你用程序设置字体时,你试过删除最后一个参数吗?

    getTitleView().setTypeface(typeFace)
    

    而不是

    getTitleView().setTypeface(typeFace, Typeface.NORMAL)