致命异常:java.lang.UnsupportedOperationException:无法解析索引为6的属性:TypedValue{t=0x2/d=0x101009b a=1}。

17

我在一个实际应用中看到了这个错误,所以我不知道为什么会发生这种情况。我的问题只有这个异常日志(请参见下文)。

起初,我认为我在XML中应用了style editTextBackgroungWhite(请参见下文),但是删除它对问题没有影响。

如果有人能指导我朝正确的方向前进,我将不胜感激。

P.S 我无法在自己的设备上复制此错误,似乎这只是一些三星Note系列设备的问题。

 <style name="editTextBackgWhite"parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">#ffffff</item>
    <item name="colorControlActivated">#ffffff</item>
    <item name="colorControlHighlight">#ffffff</item>
</style>


Fatal Exception: java.lang.UnsupportedOperationException: Failed to     resolve attribute at index 6: TypedValue{t=0x2/d=0x101009b a=1}
   at android.content.res.TypedArray.getColorStateList(TypedArray.java:484)
   at android.text.style.TextAppearanceSpan.(TextAppearanceSpan.java)
   at android.text.style.TextAppearanceSpan.(TextAppearanceSpan.java)
   at android.widget.Editor$SuggestionsPopupWindow$SuggestionInfo.(Editor.java)
   at android.widget.Editor$SuggestionsPopupWindow$SuggestionInfo.(Editor.java)
   at android.widget.Editor$SuggestionsPopupWindow.initContentView(Editor.java:2995)
   at android.widget.Editor$PinnedPopupWindow.(Editor.java)
   at android.widget.Editor$SuggestionsPopupWindow.(Editor.java)
   at android.widget.Editor.showSuggestions(Editor.java:2229)
   at android.widget.Editor$2.run(Editor.java:2109)
   at android.os.Handler.handleCallback(Handler.java:739)
   at android.os.Handler.dispatchMessage(Handler.java:95)
   at android.os.Looper.loop(Looper.java:158)
   at android.app.ActivityThread.main(ActivityThread.java:7225)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
6个回答

15
这个问题的主要原因似乎是在AppCompat库中缺少样式/主题,或者库中存在一个错误。当使用AppCompatEditTextAppCompatAutoCompleteTextView并且在布局中加入了WebView(AdMob广告是WebViews)时会出现这个问题。在几个版本的AppCompat上都会发生,如23、24、25、26。
可以在Github上某人制作的有用演示应用程序中更清楚地看到。
  1. 克隆存储库并在Android Studio v2.3或更高版本中打开。
  2. Android Studio应该提示更新此项目中的gradle依赖项和buildToolsVersion,类似于以下内容:

build.gradle:

dependencies {
    classpath 'com.android.tools.build:gradle:2.3.3'
    ...
}

app/build.gradle:

buildToolsVersion '25.0.0'

gradle-wrapper.properties:

distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
  1. 更新依赖项,然后构建项目。在安卓 7 模拟器或设备上使用 原生安卓键盘 运行应用程序。将系统语言设置为英语。
  2. 在输入字段上,使用安卓键盘输入字母 'tttf' ,然后按空格键。这个词应该被标记为拼写错误
  3. 现在点击其中一个字母(不是长按)尝试移动光标。它应该会导致应用程序崩溃 - 如下所示:

应用程序崩溃的视频截图示例

解决方法(来自这里)是在 styles.xml 中的主题 AppTheme 中显式添加两个颜色属性:"colorAccent""android:colorAccent"

<style name="AppTheme" parent="Theme.AppCompat">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:colorAccent" tools:targetApi="lollipop">@color/colorAccent</item>
</style>
或者
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:colorAccent" tools:targetApi="lollipop">@color/colorAccent</item>
</style>

现在这个问题已经解决,可以正常显示拼写建议菜单,也不会再崩溃了。

类似的报告或重复问题:


另一个对我有效的想法是:在建议项的布局中添加 android:textAppearance="@color/whatever"。可以使用 edtitext.setAdapter(arrayadapter) 设置此布局,其中 ArrayAdapter 将使用您制作的布局作为 "resource" 进行构建(请参阅https://developer.android.com/reference/android/widget/ArrayAdapter)。 - fattire

5

在使用AutoCompleteTextView时,我遇到了完全相同的异常。这让我非常苦恼,浪费了我两天时间。

造成这种情况的原因是在某些设备上启用了Google拼写检查弹出窗口,它会在EditText/AutoCompleteEditText下面的单词上画出红线,点击它会弹出单词建议的窗口。根据我的观察,这个弹窗在带有样式的TextInputLayout中运行不太好,并导致某些设备崩溃(在我的情况下是Moto G Play)。您可以通过关闭Google拼写检查来验证它,这样它就可以正常工作。但真正的解决方案是在XML中为您的编辑框添加

android:inputType="textNoSuggestions"

这将禁用该编辑框的拼写检查,其他功能也将正常工作。

如果有所帮助,请告诉我。


2
你的评论对我解决这个问题真的很有帮助,但是在添加了"textNoSuggestions"之后它仍然崩溃。我通过添加以下内容进行修复:android:inputType="textNoSuggestions|textVisiblePassword" - Juanvi Martinez

2
收到以下内容后:

Non-fatal Exception: android.view.InflateException: Binary XML file line #16 in letstwinkle.com.twinkle:layout/tsnackbar_layout: Binary XML file line #16 in letstwinkle.com.twinkle:layout/tsnackbar_layout: Error inflating class com.androidadvance.topsnackbar.TSnackbar$SnackbarLayout

... multiple intermediates ...
Caused by java.lang.UnsupportedOperationException: Failed to resolve attribute at index 5: TypedValue{t=0x2/d=0x7f0400c6 a=-1}
   at android.content.res.TypedArray.getColorStateList(TypedArray.java:675)
   at android.widget.TextView.readTextAppearance(TextView.java:4035)
   at android.widget.TextView.<init>(TextView.java:1104)
   at android.widget.Button.<init>(Button.java:166)
   at android.widget.Button.<init>(Button.java:141)
   at androidx.appcompat.widget.AppCompatButton.<init>(AppCompatButton.java:74)
   at com.google.android.material.button.MaterialButton.<init>(MaterialButton.java:224)
   at com.google.android.material.button.MaterialButton.<init>(MaterialButton.java:220)
   at java.lang.reflect.Constructor.newInstance0(Constructor.java)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
   at android.view.LayoutInflater.createView(LayoutInflater.java:864)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1016)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:971)
   at android.view.LayoutInflater.rInflate(LayoutInflater.java:1133)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:666)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:536)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
   at com.androidadvance.topsnackbar.TSnackbar$SnackbarLayout.<init>(TSnackbar.java:633)
   at java.lang.reflect.Constructor.newInstance0(Constructor.java)
   at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
   at android.view.LayoutInflater.createView(LayoutInflater.java:864)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1016)
   at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:971)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:669)
   at android.view.LayoutInflater.inflate(LayoutInflater.java:536)
   at com.androidadvance.topsnackbar.TSnackbar.<init>(TSnackbar.java:130)
   at com.androidadvance.topsnackbar.TSnackbar.make(TSnackbar.java:137)
   at letstwinkle.com.twinkle.TopSnackbarReceiver.onReceive(TopSnackbarReceiver.java:26)
   at android.app.ActivityThread.handleReceiver(ActivityThread.java:4349)
   at android.app.ActivityThread.access$2500(ActivityThread.java:296)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2238)
   at android.os.Handler.dispatchMessage(Handler.java:107)
   at android.os.Looper.loop(Looper.java:213)
   at android.app.ActivityThread.main(ActivityThread.java:8178)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1101)

经过多次调查,我发现原因是在属性中使用colorAccent?attr/)。
<com.google.android.material.button.MaterialButton
    ...
    android:textColor="?attr/colorAccent"
    tools:text="Action"/>

我在我的主题中声明了colorAccent:

<item name="colorAccent">@color/colorAccent</item>

但是我的主题继承了Theme.MaterialComponents.Light.DarkActionBar.Bridge,我想知道这是否有关系。在我的布局中的其他地方,我只使用@color/colorAccent

2

现在是2021年,但在Android N上仍存在这个错误。至于我的布局,我使用的是以下的XML代码:

<androidx.appcompat.widget.AppCompatEditText
            android:theme="@style/EditTextOnWhiteBgr"
            ...
/>

我的EditTextOnWhiteBgr主题是这样设置的(styles.xml):

<style name="EditTextOnWhiteBgr" parent="@android:style/TextAppearance">
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:colorAccent">@color/colorPrimary</item>
</style>

经过一番调查,我发现异常抛出了Failed to resolve attribute at index 6: TypedValue{t=0x2/d=0x101009b a=1},我明白它指的是<public type="attr" name="textColorLink" id="0x0101009b" />
我通过将该属性添加到我的EditText主题中来解决问题,代码如下:
<style name="EditTextOnWhiteBgr" parent="@android:style/TextAppearance">
    <!-- ... -->
    <item name="android:textColorLink">@color/colorPrimary</item>
    <!-- ... -->
</style>

1
你是怎么发现这个id="0x0101009b"指的是textColorLink属性的? - ngaspama
全局字符串搜索 101009b 给我在 /sdk/platforms/android-30/data/res/values/public.xml 中的结果。 - Ion Farima

1

我遇到了类似的问题,所以我来到了这个问题。以下是我发现问题原因的方法。首先是我的StackTrace:

android.view.InflateException: Binary XML file line #95 in my.app:layout/abc_alert_dialog_material: Binary XML file line #37 in my.app:layout/abc_alert_dialog_button_bar_material: Error inflating class Button
Caused by: android.view.InflateException: Binary XML file line #37 in my.app:layout/abc_alert_dialog_button_bar_material: Error inflating class Button
Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 16: TypedValue{t=0x2/d=0x7f040314 a=7}
    at android.content.res.TypedArray.getColorStateList(TypedArray.java:596)
    at com.google.android.material.resources.MaterialResources.getColorStateList(MaterialResources.java:76)
    at com.google.android.material.button.MaterialButtonHelper.loadFromAttributes(MaterialButtonHelper.java:109)
    at com.google.android.material.button.MaterialButton.<init>(MaterialButton.java:249)
    at com.google.android.material.button.MaterialButton.<init>(MaterialButton.java:220)
    ...

在我的情况下,与ColorStateList有关的某些内容崩溃了。以下是MaterialButtonHelper.java中109行左右的代码:
rippleColor =
    MaterialResources.getColorStateList(
        materialButton.getContext(), attributes, R.styleable.MaterialButton_rippleColor);

所以这个库正在尝试加载一个名为rippleColor的属性。除此之外,没有什么特别的,因为我为我的应用程序定义了一个同名的属性。该资源的类型在我的主题颜色中。所以这就是崩溃的原因。我需要重命名该属性,这个崩溃就应该解决了。

你的修复有效吗? - LarsH
是的,这就是为什么我分享了我的解决方案。 - rekire
谢谢分享。由于您的最后一段是用“需要”和“应该”的术语表达的,因此并不清楚它是否实际起作用了。 - LarsH

0
根据@Abhinav Pawar的答案,我使用了
android:inputType="textAutoCorrect"
代替
android:inputType="textNoSuggestions"
事实上,textNoSuggestions会移除键盘输入时所有建议单词。而textAutoCorrect则会将错误的单词替换为正确的单词,同时用户可以任意选择使用哪个单词。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接