こんにちは、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'
}
}
誰かが私を助けてくれるといいですね。
自分でこの問題に遭遇しました。それは私のアプリがまだ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>
Activity
の代わりにgetApplicationContext()
を使用してLayoutInflater
を取得し、リストアダプタのアイテムビューを拡張したため、同じ問題が発生しました。
この問題を解決するには、アクティビティの親テーマとしてTheme.AppCompat.Light
を使用します。 add:理由は、FloatingActionButtonでinnerを使用するデフォルトスタイルの1つが次のように宣言されているためです。 backgroundTintは別の属性colorAccentを参照しています。colorAccentは、テーマでメジャー宣言する必要があります。そうでない場合、例外がスローされる可能性があります。ただし、colorAccent
はAppCompatテーマで宣言されており、sdkのデフォルトテーマでは宣言されていません。実行時にデザインライブラリを正しく使用できることを測定するには、Theme.AppCompat.Light
のようなAppCompatテーマの使用。
テーマを確認してください。
私のテーマ:
<!-- 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>
これは、複数のstyle.xmlファイルが原因です。
アプリのbuild.gradleファイルに次の行を追加します。
compile 'com.Android.support:design:22.2.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でした。カスタムビューでAppThemeを定義しなかったため、ロード方法を決定できませんでしたtextColorPrimary。 Android:theme = "@ style/AppTheme"により、これは修正されました))
私の場合、setContentView(R.layout.my_layout)
でエラーが発生しました。 my_layout
で、エラーの原因となったTextInputLayout
でapp:errorEnabled="true"
を使用していました。その行を削除し、機能しました。