I'm trying to use the Snackbar from the Design Support Library 22.2.1 and I'm getting an InflateException
.
This is how I'm using it:
Snackbar.make(searchQueryButton, "Hello world", Snackbar.LENGTH_LONG).show();
And this is the exception:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp.android.search.test_app/com.myapp.android.search.test_app.MainActivity}: android.view.InflateException: Binary XML file line #18: Error inflating class android.support.design.widget.Snackbar$SnackbarLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2339)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: android.view.InflateException: Binary XML file line #18: Error inflating class android.support.design.widget.Snackbar$SnackbarLayout
at android.view.LayoutInflater.createView(LayoutInflater.java:633)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.support.design.widget.Snackbar.<init>(Snackbar.java:127)
at android.support.design.widget.Snackbar.make(Snackbar.java:148)
at com.myapp.android.search.test_app.MainActivity.onCreate(MainActivity.java:60)
at android.app.Activity.performCreate(Activity.java:6010)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.support.design.widget.Snackbar.<init>(Snackbar.java:127)
at android.support.design.widget.Snackbar.make(Snackbar.java:148)
at com.myapp.android.search.test_app.MainActivity.onCreate(MainActivity.java:60)
at android.app.Activity.performCreate(Activity.java:6010)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: android.view.InflateException: Binary XML file line #34: Error inflating class TextView
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.design.widget.Snackbar$SnackbarLayout.<init>(Snackbar.java:534)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.support.design.widget.Snackbar.<init>(Snackbar.java:127)
at android.support.design.widget.Snackbar.make(Snackbar.java:148)
at com.myapp.android.search.test_app.MainActivity.onCreate(MainActivity.java:60)
at android.app.Activity.performCreate(Activity.java:6010)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 13
at android.content.res.TypedArray.getDrawable(TypedArray.java:747)
at android.view.View.<init>(View.java:3742)
at android.widget.TextView.<init>(TextView.java:637)
at android.widget.TextView.<init>(TextView.java:632)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:44)
at android.support.v7.widget.AppCompatTextView.<init>(AppCompatTextView.java:40)
at android.support.v7.internal.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:103)
at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:806)
at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:836)
at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:725)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at android.support.design.widget.Snackbar$SnackbarLayout.<init>(Snackbar.java:534)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
at android.view.LayoutInflater.createView(LayoutInflater.java:607)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
at android.view.LayoutInflater.inflate(LayoutInflater.java:482)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.support.design.widget.Snackbar.<init>(Snackbar.java:127)
at android.support.design.widget.Snackbar.make(Snackbar.java:148)
at com.myapp.android.search.test_app.MainActivity.onCreate(MainActivity.java:60)
at android.app.Activity.performCreate(Activity.java:6010)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1129)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2413)
at android.app.ActivityThread.access$800(ActivityThread.java:155)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
Any ideas on how to fix this? Is this an issue from the library?
BTW, I'm running it on Lollipop 5.1 and I have all my activities extending from AppCompatActivity
with the proper theme.
EDIT:
I realised that the theme is the problem. If I make my activity use Theme.AppCompat.Light.NoActionBar
, it works as expected.
However, if I use my own theme (which overrides Theme.AppCompat.Light.NoActionBar
), it throws the exception I described above.
This is my theme:
<style name="Theme.MLTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@color/background_color</item>
<item name="android:windowActionModeOverlay">true</item>
<item name="vpiCirclePageIndicatorStyle">@style/CustomCirclePageIndicator</item>
<item name="android:actionMenuTextColor">@color/gray_dark</item>
<item name="actionBarTabBarStyle">@style/Widget.MLTheme.ActionBar</item>
<item name="actionBarStyle">@style/Widget.MLTheme.ActionBar</item>
<item name="actionBarTabStyle">@style/Widget.MLTheme.ActionBar.TabView</item>
<item name="actionBarTabTextStyle">@style/Widget.MLTheme.ActionBar.TabText</item>
<item name="android:buttonStyle">@style/MLButton.Primary</item>
<item name="buttonBarButtonStyle">@style/MLButton.Primary</item>
<item name="android:textViewStyle">@style/textview_default</item>
<item name="android:progressBarStyle">@style/Widget.MyApp.ProgressBar.Horizontal</item>
<item name="android:progressBarStyleHorizontal">@style/Widget.MyApp.ProgressBar.Horizontal</item>
<item name="android:progressBarStyleLarge">@style/Widget.MyApp.ProgressBar.Horizontal</item>
<item name="android:scrollViewStyle">@style/Widget.ScrollView.Default</item>
<item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
<item name="colorAccent">@color/blue</item>
<item name="android:actionBarSize">@dimen/abc_action_bar_default_height_material</item>
<item name="android:colorPressedHighlight">@color/selection_color</item>
<item name="android:colorLongPressedHighlight">@color/selection_color</item>
<item name="android:spinnerItemStyle">@style/MLSpinnerItem</item>
<item name="android:listSeparatorTextViewStyle">@style/MLPreference.ListHeader</item>
<item name="android:dropDownItemStyle">@style/MLDropDownItemStyle</item>
<item name="actionBarItemBackground">?attr/selectableItemBackgroundBorderless</item>
<!-- for native ActionBar -->
<item name="android:actionBarItemBackground">?attr/selectableItemBackgroundBorderless</item>
<item name="selectableItemBackground">?attr/selectableItemBackground</item>
</style>
EDIT 2:
I found that if I remove the last entry in my theme, everything works as expected again.
<item name="selectableItemBackground">?attr/selectableItemBackground</item>
Does anyone know why this is causing the exception? And also, does anyone know how to replace that entry to achieve the same effect by keeping the Snackbar working?
Thank you.
Ok, I finally solved the issue by changing this:
<item name="selectableItemBackground">?attr/selectableItemBackground</item>
... to this:
<item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
I suspect that if you upgrade AppCompat to 22.2.1, you also have to change that attribute.