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

时间:2015-05-31 20:29:16

标签: 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

如果我改为:

app:layout_behavior="android.support.design.widget.AppBarLayout$ScrollingViewBehavior"

一切正常。

我失踪了什么?

5 个答案:

答案 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'

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

答案 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>
相关问题