Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using AppCompat 'layout_behavior' with '@string/appbar_scrolling_view_behavior' throws exception

I have a strange probem using the AppCompat Lib 22.2 with the new introduced: layout_behavior

If i use it with the value "@string/appbar_scrolling_view_behavior" , as described here Android Design Support Lib the application terminates with the following exception:

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

If i change to :

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

everything works fine.

What i'm missing ?

like image 904
Andre Classen Avatar asked May 31 '15 20:05

Andre Classen


3 Answers

For others who encounter this exception and use proguard - you need to add following proguard rules:

-keep class android.support.design.widget.** { *; }
-keep interface android.support.design.widget.** { *; }
-dontwarn android.support.design.**

or if you don't want to keep all of the design library components you can use:

-keepattributes *Annotation*
-keep public class * extends android.support.design.widget.CoordinatorLayout.Behavior { *; }
-keep public class * extends android.support.design.widget.ViewOffsetBehavior { *; }
like image 72
Nati Dykstein Avatar answered Nov 18 '22 10:11

Nati Dykstein


Another reason for this to be happening is when you're extending FloatingActionButton.Behavior and you don't have a (Context, AttributeSet) constructor. That happened to me with design library v. 23.0.1

Just add this constructor to your subclass:

public FloatingActionButtonBehaviorSubclass(Context context, AttributeSet attrs) {
    super();
}
like image 44
fast3r Avatar answered Nov 18 '22 10:11

fast3r


You should add design lib for your project.

compile 'com.android.support:design:22.2.0'

Check the sample https://github.com/chrisbanes/cheesesquare

like image 23
chenupt Avatar answered Nov 18 '22 10:11

chenupt