Android XML:RuntimeException:无法解析索引6处的属性

时间:2015-06-02 11:45:40

标签: android xml exception android-studio gradle

您好亲爱的stackoverflower,

在我的项目中,我正在使用新的" android设计库"。 问题是,有一个运行时异常说(我试图创建一个FloatingButton):

 java.lang.RuntimeException: Failed to resolve attribute at index 6
        at android.content.res.TypedArray.getColorStateList(TypedArray.java:426)
        at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:91)
        at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:79)
        at android.support.design.widget.FloatingActionButton.<init>(FloatingActionButton.java:75)

我能够弄明白,哪个属性无法解决:

<style name="Widget.Design.FloatingActionButton" parent="android:Widget">
    <item name="android:background">@drawable/fab_background</item>
    <item name="backgroundTint">?attr/colorAccent</item>  **!! this one is missing !!**
    <item name="fabSize">normal</item>
    <item name="elevation">@dimen/fab_elevation</item>
    <item name="pressedTranslationZ">@dimen/fab_translation_z_pressed</item>
    <item name="rippleColor">?attr/colorControlHighlight</item>
    <item name="borderWidth">@dimen/fab_border_width</item>
</style>

它位于android-design-library

中的res / values / styles / styles.xml中

我在this帖子中读到API lvl应该是21+。但由于设计库支持API 7+,实际上这应该不是问题。

值得一提的是,我没有将设计库包含为这样的gradle依赖:

 compile 'com.android.support:design:22.2.0'

我正在手动将库添加到项目中,因为Jenkins服务器无法访问Internet。 我已将support-v4库更新为21.2.0 此外,还包含并更新了appcompat support-v7。

这是android-design-library gradle文件:

android {
compileSdkVersion 21
buildToolsVersion "21.1.2"

defaultConfig {
    minSdkVersion 17
    targetSdkVersion 21
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
}

如果有人可以帮助我,那就太棒了。

10 个答案:

答案 0 :(得分:29)

自己陷入这个问题。这是因为我的应用尚未使用AppCompat,仍然只是常规支持FragmentActivity。这意味着FloatingActionButton正在寻找两个主题属性,但却无法找到它们。

特别添加这些缺少的属性使其对我有用而无需开始使用AppCompat。

<LinearLayout
    ...
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    .../>

    <android.support.design.widget.FloatingActionButton
        ...
        app:backgroundTint="@color/{some color statelist}"
        app:rippleColor="@color/{some color statelist}"
        ... />

</LinearLayout>

答案 1 :(得分:16)

因为使用getApplicationContext()代替Activity来检索LayoutInflater并为列表适配器的项目视图充气,所以会出现同样的问题。

答案 2 :(得分:8)

您可以使用Theme.AppCompat.Light作为活动的父主题来解决此问题。 加: 原因是在FloatingActionButton中使用inner的默认样式之一是这样声明: enter image description here backgroundTint是指另一个属性colorAccent,它应该是在我们的主题中声明的度量,否则,异常可能是throw。 但colorAccent在AppCompat主题中声明,并且未在sdk默认主题中声明。为了衡量我们可以在运行中正确使用设计lib,其中一个简单的方法是测量AppCompat主题的使用,如{{ 1}}。

答案 3 :(得分:4)

确保您的主题。

我的主题:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">#2196F3</item>
    <item name="colorPrimaryDark">#1565C0</item>
    <item name="colorAccent">#E91E63</item>
</style>

答案 4 :(得分:4)

这是因为有多个style.xml文件。

在app build.gradle文件中添加以下行:

compile 'com.android.support:design:22.2.0'

答案 5 :(得分:1)

在使用自定义属性(但使用applicationContext)创建自定义视图时遇到了这个问题。我认为应用程序上下文错过了我属性的信息。更改为活动的上下文可以解决我的问题。

答案 6 :(得分:0)

就我而言,我在setContentView(R.layout.my_layout)时遇到了错误。 在my_layout中,我在app:errorEnabled="true"中使用TextInputLayout导致错误。删除了那条线,它起作用了。

答案 7 :(得分:0)

我在attrs.xml和customview中使用了自定义属性。我没有在自定义视图中指定theme:属性,所以遇到了这个问题。快速查看文件外观

attrs.xml

<resources>
    <attr name="textColorPrimary" format="reference" />
    ...
</resources>

customview.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tvText"
    style="@style/TitleBlackThin"
    android:theme="@style/AppTheme"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:padding="16dp"
    android:text="@string/text" />

在我的 styles.xml 中,我扩展了样式以使用AppTheme

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
         <item name="textColorPrimary">@color/black</item>
    </style>
 ...
    <style name="TitleBlackThin">
        <item name="android:textSize">20sp</item>
        <item name="android:fontFamily">sans-serif-light</item>
        <item name="android:textStyle">normal</item>
        <item name="android:textColor">?textColorPrimary</item>
    </style>
...
</resources>

罪魁祸首是自定义属性?textColorPrimary 。由于我没有在customview中定义AppTheme,因此无法确定如何加载 textColorPrimary 。通过 android:theme =“ @ style / AppTheme” ,此问题已解决))

答案 8 :(得分:0)

就我而言,此问题在迁移到AndroidX后开始出现。该方案是我实现了自定义视图,该视图扩展了AppCompatEditText并设置了自定义样式。我在运行单元测试时遇到了这个问题。

错误日志显示这是根本原因:

Caused by: java.lang.UnsupportedOperationException: Failed to resolve attribute at index 13: TypedValue{t=0x2/d=0x7f0300f9 a=2}
    at android.content.res.TypedArray.getDrawableForDensity(TypedArray.java:946)
    at android.content.res.TypedArray.getDrawable(TypedArray.java:930)

在我使用的Base.Widget.AppCompat.EditText样式中:

<style name="MyEditText" parent="Base.Widget.AppCompat.EditText">
    <item name="android:fontFamily">...</item>
    <item name="android:textSize">...</item>
</style>

将父级更改为Android的基础android:Widget.EditText消除了该错误,并且没有为我更改任何行为/ UI。

自从深入研究Base.Widget.AppCompat.EditText的继承结构以来,这很奇怪,其根父级也是android:Widget.EditText

答案 9 :(得分:0)

如果有人在设置Android TV或与AndroidTV示例代码一起工作时遇到此问题,则解决方案是在清单中将leanback主题添加到您的活动中

<activity
  android:name=".PlaybackActivity"
  android:theme="@style/Theme.Leanback" />