使用AppCompat'layout_behavior'和'@ string/appbar_scrolling_view_behavior'抛出异常

And*_*sen 31 android android-appcompat

我有一个奇怪的探测器使用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
Run Code Online (Sandbox Code Playgroud)

如果我改为:

app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior"
Run Code Online (Sandbox Code Playgroud)

一切正常.

我错过了什么?

Nat*_*ein 56

对于遇到此异常并使用proguard的其他人 - 您需要添加以下proguard规则:

-keep class android.support.design.widget.** { *; }
-keep interface android.support.design.widget.** { *; }
-dontwarn android.support.design.**
Run Code Online (Sandbox Code Playgroud)

或者如果您不想保留所有可以使用的设计库组件:

-keepattributes *Annotation*
-keep public class * extends android.support.design.widget.CoordinatorLayout.Behavior { *; }
-keep public class * extends android.support.design.widget.ViewOffsetBehavior { *; }
Run Code Online (Sandbox Code Playgroud)

  • 最后一行是不必要的,因为它将由第2行保留. (3认同)

fas*_*t3r 37

发生这种情况的另一个原因是当你扩展FloatingActionButton.Behavior并且你没有(Context,AttributeSet)构造函数时.设计库v.23.0.1发生在我身上

只需将此构造函数添加到您的子类:

public FloatingActionButtonBehaviorSubclass(Context context, AttributeSet attrs) {
    super();
}
Run Code Online (Sandbox Code Playgroud)


che*_*upt 23

您应该为项目添加设计库.

compile 'com.android.support:design:22.2.0'
Run Code Online (Sandbox Code Playgroud)

查看示例https://github.com/chrisbanes/cheesesquare