Reputation: 4007
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 ?
Upvotes: 31
Views: 45089
Reputation: 2679
I encountered this error today after migrating my project to Androidx.
It seems that I had a string in my string.xml file. I had to remove this line.
<string name="appbar_scrolling_view_behavior" translatable="false">android.support.design.widget.AppBarLayout$ScrollingViewBehavior</string>
It should only link to values.xml file and not string.xml file.
app:layout_behavior="@string/appbar_scrolling_view_behavior" should only link to values.xml (Ctrl+B)
<string name="appbar_scrolling_view_behavior" translatable="false">com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior</string>
Upvotes: 2
Reputation: 1308
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();
}
Upvotes: 37
Reputation: 17119
For developers who are using getting this error only when using proguard, just add a single line to proguard rules file :
-keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior { *; }
Upvotes: 3
Reputation: 1290
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 { *; }
Upvotes: 56
Reputation: 1781
You should add design lib for your project.
compile 'com.android.support:design:22.2.0'
Check the sample https://github.com/chrisbanes/cheesesquare
Upvotes: 23