Использование AppCompat 'layout_behavior' с '@string/appbar_scrolling_view_behavior' вызывает исключение
У меня странная проблема с использованием 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"
все работает нормально.
Что мне не хватает?
Ответы
Ответ 1
Для других, которые сталкиваются с этим исключением и используют 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 { *; }
Ответ 2
Другая причина, по которой это происходит, заключается в том, что вы расширяете FloatingActionButton.Behavior и у вас нет конструктора Context, AttributeSet. Это случилось со мной с библиотекой дизайна v. 23.0.1
Просто добавьте этот конструктор в свой подкласс:
public FloatingActionButtonBehaviorSubclass(Context context, AttributeSet attrs) {
super();
}
Ответ 3
Вы должны добавить проект lib для своего проекта.
compile 'com.android.support:design:22.2.0'
Проверьте образец https://github.com/chrisbanes/cheesesquare
Ответ 4
Для разработчиков, которые используют эту ошибку только при использовании proguard, просто добавьте одну строку в файл правил proguard:
-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior { *; }