Подтвердить что ты не робот

Использование 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"

все работает нормально.

Что мне не хватает?

4b9b3361

Ответ 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 { *; }