web-dev-qa-db-ja.com

Android XML:RuntimeException:インデックス6の属性の解決に失敗しました

こんにちは、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 を読んだことがあります。APIlvlはbis 21+である必要があります。ただし、デザインライブラリはAPI 7+をサポートしているため、これは実際には問題になりません。

また、デザインライブラリを次のようなgradle-dependencyとして含めていないことにも言及する価値があります。

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

Jenkinsサーバーはインターネットにアクセスできないため、ライブラリをプロジェクトに手動で追加しています。 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'
    }
}

誰かが私を助けてくれるといいですね。

38
Paul Reznik

自分でこの問題に遭遇しました。それは私のアプリがまだAppCompatを使用していないためであり、それでも通常のサポートFragmentActivityだけです。これは、FloatingActionButtonが2つのテーマ属性を探していて、それらを見つけることができなかったことを意味します。

これらの欠落している属性を明確に追加することで、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>
30
Kevin Grant

Activityの代わりにgetApplicationContext()を使用してLayoutInflaterを取得し、リストアダプタのアイテムビューを拡張したため、同じ問題が発生しました。

20
orium

この問題を解決するには、アクティビティの親テーマとしてTheme.AppCompat.Lightを使用します。 add:理由は、FloatingActionButtonでinnerを使用するデフォルトスタイルの1つが次のように宣言されているためです。 enter image description here backgroundTintは別の属性colorAccentを参照しています。colorAccentは、テーマでメジャー宣言する必要があります。そうでない場合、例外がスローされる可能性があります。ただし、colorAccentはAppCompatテーマで宣言されており、sdkのデフォルトテーマでは宣言されていません。実行時にデザインライブラリを正しく使用できることを測定するには、Theme.AppCompat.LightのようなAppCompatテーマの使用。

9
Gnod

テーマを確認してください。

私のテーマ:

<!-- 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>
5
dupengtao

これは、複数のstyle.xmlファイルが原因です。

アプリのbuild.gradleファイルに次の行を追加します。

compile 'com.Android.support:design:22.2.0'
4
Arun kumar

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でした。カスタムビューでAppThemeを定義しなかったため、ロード方法を決定できませんでしたtextColorPrimaryAndroid:theme = "@ style/AppTheme"により、これは修正されました))

1
Jainam Jhaveri

私の場合、setContentView(R.layout.my_layout)でエラーが発生しました。 my_layoutで、エラーの原因となったTextInputLayoutapp:errorEnabled="true"を使用していました。その行を削除し、機能しました。

0
Tincho825