Android 使用AppCompat';布局行为';与'@字符串/appbar_滚动_查看_行为';抛出异常
我在使用AppCompat Lib 22.2时遇到了一个奇怪的问题:layout_行为 如果我将其与值“@string/appbar\u scrolling\u view\u behavior”一起使用,如本文所述,应用程序将终止,出现以下异常:Android 使用AppCompat';布局行为';与'@字符串/appbar_滚动_查看_行为';抛出异常,android,android-appcompat,Android,Android Appcompat,我在使用AppCompat Lib 22.2时遇到了一个奇怪的问题:layout_行为 如果我将其与值“@string/appbar\u scrolling\u view\u behavior”一起使用,如本文所述,应用程序将终止,出现以下异常: Could not inflate Behavior subclass android.support.design.widget.Settings Caused by: java.lang.RuntimeException: Could n
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"
一切正常
我缺少什么?您应该为项目添加设计库
compile 'com.android.support:design:22.2.0'
对于遇到此异常并使用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 { *; }
对于仅在使用proguard时使用getting的开发人员,只需在proguard规则文件中添加一行即可:
-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior { *; }
发生这种情况的另一个原因是,当您扩展FloatingActionButton.Behavior而没有(Context,AttributeSet)构造函数时。我在设计库v中遇到过这种情况。23.0.1 只需将此构造函数添加到子类:
public FloatingActionButtonBehaviorSubclass(Context context, AttributeSet attrs) {
super();
}
今天将项目迁移到Androidx后,我遇到了这个错误 似乎我的string.xml文件中有一个字符串。我不得不删除这条线
<string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>
android.support.design.widget.AppBarLayout$ScrollingViewBehavior
它应该只链接到values.xml文件,而不是string.xml文件。
app:layout_behavior=“@string/appbar_scrolling_view_behavior”应仅链接到values.xml(Ctrl+B)
com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior
您正在使用ProGuard吗?嗨,不,我没有使用ProGuard。看我的身材。格雷德:真丢人。我一定是不小心将字符串导出到了string.xml。我也遇到了同样的问题,它确实是proguard。最后一行是不必要的,因为它将保留在第2行中。重要的一点是强制重新生成应用程序。在我的系统上,没有使用更新的ProGuard设置;我对BottomSheetBehavior也有同样的问题。我认为对您的构造函数的相应超级调用应该是super(context,attrs);而不是这个。支持库版本的FloatingActionButton.Behavior
(至少在我当前使用的23.2.0中)不会覆盖任何构造函数,因此无参数的构造函数是唯一可用的。
<string name="appbar_scrolling_view_behavior" translatable="false">com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior</string>