Исключение InflateException только на Android 4.X

#android

#Android

Вопрос:

Прежде чем пометить вопрос как дубликат, я уже проверил другие ответы, и ничего не сработало. Приложение работает на Android> = 5.0, но не работает на Android 4.4.2 и, вероятно, на других устройствах Android 4.x.

Это строка, в которой происходит сбой:

  @Override
    public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
    {
       View itemView = LayoutInflater.from(context).inflate(itemLayout, parent, false);
       ..........................
  

build.gradle

 android {
    compileSdkVersion 23
    buildToolsVersion ANDROID_BUILD_TOOLS

defaultConfig {
    minSdkVersion 16
    targetSdkVersion ANDROID_TARGET_SDK
.......................
}


dependencies {
 compile 'com.android.support:appcompat-v7:23.1.0'
 compile 'com.android.support:design:23.1.0'
 compile 'com.android.support:recyclerview-v7:23.1.0'
 compile 'com.github.bumptech.glide:glide:3.5.2'
 .......................
}
  

Трассировка стека

 android.view.InflateException: Binary XML file line #1: Error inflating class <unknown>
                                                                        at android.view.LayoutInflater.createView(LayoutInflater.java:620)
                                                                        at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
                                                                        at android.view.LayoutInflater.onCreateView(LayoutInflater.java:669)
                                                                        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:694)
                                                                        at android.view.LayoutInflater.inflate(LayoutInflater.java:469)
                                                                        at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
                                                                        at com.dyve.counting.FileExplorer.RecyclerAdapter.onCreateViewHolder(RecyclerAdapter.java:54)
                                                                        at com.dyve.counting.FileExplorer.RecyclerAdapter.onCreateViewHolder(RecyclerAdapter.java:18)
                                                                        at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5223)
                                                                        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4449)
                                                                        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4359)
                                                                        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1961)
                                                                        at android.support.v7.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:438)
                                                                        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1333)
                                                                        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:562)
                                                                        at android.support.v7.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:171)
                                                                        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:2900)
                                                                        at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3071)
                                                                        at android.view.View.layout(View.java:14858)
                                                                        at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                        at android.support.design.widget.CoordinatorLayout.layoutChild(CoordinatorLayout.java:1037)
                                                                        at android.support.design.widget.CoordinatorLayout.onLayoutChild(CoordinatorLayout.java:747)
                                                                        at android.support.design.widget.ViewOffsetBehavior.onLayoutChild(ViewOffsetBehavior.java:42)
                                                                        at android.support.design.widget.AppBarLayout$ScrollingViewBehavior.onLayoutChild(AppBarLayout.java:1133)
                                                                        at android.support.design.widget.CoordinatorLayout.onLayout(CoordinatorLayout.java:760)
                                                                        at android.view.View.layout(View.java:14858)
                                                                        at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                        at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1043)
                                                                        at android.view.View.layout(View.java:14858)
                                                                        at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
                                                                        at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
                                                                        at android.view.View.layout(View.java:14858)
                                                                        at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1673)
                                                                        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
                                                                        at android.widget.LinearLayout.onLayout(LinearLayout.java:1436)
                                                                        at android.view.View.layout(View.java:14858)
                                                                        at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
                                                                        at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
                                                                        at android.view.View.layout(View.java:14858)
                                                                        at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1673)
                                                                        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
                                                                        at android.widget.LinearLayout.onLayout(LinearLayout.java:1436)
                                                                        at android.view.View.layout(View.java:14858)
                                                                        at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
                                                                        at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
                                                                        at android.view.View.layout(View.java:14858)
                                                                        at android.view.ViewGroup.layout(ViewGroup.java:4646)
                                                                        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2035)
                                                                        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1792)
                                                                        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1047)
  

файл XML:

 <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@ id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" >

<android.support.design.widget.CoordinatorLayout
    android:id="@ id/coordinator_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <android.support.design.widget.AppBarLayout
        android:id="@ id/app_bar_layout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/app_bar_height"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar" >

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@ id/collapsing_toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/primary_color"
            app:expandedTitleMarginStart="@dimen/title_margin"
            app:layout_scrollFlags="scroll|exitUntilCollapsed" >

            <android.support.v7.widget.Toolbar
                android:id="@ id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?actionBarSize"
                app:contentInsetStart="@dimen/title_margin"
                app:layout_collapseMode="pin"
                android:background="@color/primary_color"/>

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@ id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipToPadding="false"
        android:paddingBottom="48dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>
  

Первая строка XML-файла: <android.support.v4.widget.DrawerLayout

Кажется, я не могу понять, почему это происходит, и это сводит меня с ума. Я был бы очень признателен за любую помощь.

Комментарии:

1. Что такое itemLayout?

2. @Code-Apprentice Это целое число. Я отредактировал вопрос со всей функцией.

3. Почему это целое число вместо int? Где вы устанавливаете значение?

4. В initRecyclerView() я установил его значение. recyclerAdapter.setItemLayout(R.layout.list_item_0); recyclerAdapter.setSpanCount(getResources().getInteger(R.integer.span_count0));

5. @Code-Apprentice Здесь вы можете найти весь код, если хотите взглянуть. Спасибо. Ссылка: github.com/calintat/Explorer

Ответ №1:

Потратив 2 глупых дня на выяснение, в чем проблема, я выяснил причину. : использование атрибутов в качестве ссылки на цвет в xml, который можно нарисовать. В API<21 вы не можете использовать атрибуты для раскрашивания в xml drawable. Таким образом, единственный способ — использовать ссылку на ресурс цвета (@color / YOURS_COLOR) или использовать формат #RGB.Итак, если вы хотите использовать xml drawable с зависящими от темы цветами, вы должны создать drawable для каждой темы;

Решение: в случае, если кто-то столкнется с его исключением, вы должны перехватить его и посмотреть на его причину в окне переменных, потому что именно там сообщение об ошибке является более явным.

Я изменил фон для относительного макета с @drawable/selectable_background.xml на другой цвет, и теперь все работает нормально. введите описание изображения здесь