3

Design Support Library 22.2.1 の Snackbar を使用しようとしていますが、InflateException.

これは私がそれを使用している方法です:

Snackbar.make(searchQueryButton, "Hello world", Snackbar.LENGTH_LONG).show();

そして、これは例外です:

    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)

これを修正する方法についてのアイデアはありますか? これは図書館の問題ですか?

ところで、私は Lollipop 5.1 で実行しており、すべてのアクティビティをAppCompatActivity適切なテーマで拡張しています。

編集:

テーマが問題だと気づきました。アクティビティを使用するTheme.AppCompat.Light.NoActionBarと、期待どおりに動作します。

ただし、独自のテーマ (をオーバーライドするTheme.AppCompat.Light.NoActionBar) を使用すると、上記の例外がスローされます。

これが私のテーマです:

    <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>

編集2:

テーマの最後のエントリを削除すると、すべてが再び期待どおりに機能することがわかりました。

<item name="selectableItemBackground">?attr/selectableItemBackground</item>

これが例外を引き起こしている理由を誰かが知っていますか? また、スナックバーの動作を維持することで同じ効果を達成するためにそのエントリを置き換える方法を知っている人はいますか?

ありがとうございました。

4

1 に答える 1