我使用AppCompat Lib 22.2进行了一个奇怪的探测,引入了新的:layout_behavior
如果我使用值" @ string / appbar_scrolling_view_behavior" ,如此处所述Android Design Support Lib,应用程序终止时出现以下异常:
Could not inflate Behavior subclass android.support.design.widget.Settings
Caused by: java.lang.RuntimeException: Could not inflate Behavior subclass android.support.design.widget.Settings
Caused by: java.lang.ClassNotFoundException: android.support.design.widget.Settings
Caused by: java.lang.NoClassDefFoundError: android/support/design/widget/Settings
Caused by: java.lang.ClassNotFoundException: android.support.design.widget.Settings
如果我改为:
app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior"
一切正常。
我失踪了什么?
答案 0 :(得分:55)
对于遇到此异常并使用proguard的其他人 - 您需要添加以下proguard规则:
-keep class android.support.design.widget.** { *; }
-keep interface android.support.design.widget.** { *; }
-dontwarn android.support.design.**
或者如果您不想保留所有可以使用的设计库组件:
-keepattributes *Annotation*
-keep public class * extends android.support.design.widget.CoordinatorLayout.Behavior { *; }
-keep public class * extends android.support.design.widget.ViewOffsetBehavior { *; }
答案 1 :(得分:36)
发生这种情况的另一个原因是当您扩展 FloatingActionButton.Behavior 并且您没有(Context,AttributeSet)构造函数时。设计库v.23.0.1
发生在我身上只需将此构造函数添加到您的子类:
public FloatingActionButtonBehaviorSubclass(Context context, AttributeSet attrs) {
super();
}
答案 2 :(得分:21)
您应该为项目添加设计库。
compile 'com.android.support:design:22.2.0'
答案 3 :(得分:2)
对于仅在使用proguard时使用此错误的开发人员,只需在proguard规则文件中添加一行:
-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior { *; }
答案 4 :(得分:0)
我今天将项目迁移到Androidx后遇到了此错误。
似乎我的string.xml文件中有一个字符串。我必须删除此行。
<string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>
它应该仅链接到values.xml文件,而不是string.xml文件。
app:layout_behavior =“ @ string / appbar_scrolling_view_behavior”应该仅链接到values.xml(Ctrl + B)
<string name="appbar_scrolling_view_behavior" translatable="false">com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior</string>