您好亲爱的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'
}
}
如果有人可以帮助我,那就太棒了。
答案 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的默认样式之一是这样声明:
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" />