android.view.InflateException: строка двоичного XML-файла # 12: ошибка надувания класса <unknown>

147

Я получаю много ошибок, отображаемых в Subj. Эти ошибки кажутся случайными, и я не могу их воспроизвести. Из стека я могу узнать, что такая ошибка может возникать для разных ресурсов моего макета. Линия XML также меняется.

Кто-нибудь может объяснить, почему происходит эта ошибка? И что я могу сделать, чтобы решить эту проблему?

стек

=============================================================

com.fsp.android.f generated the following exception:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fsp.android.f/com.life360.android.ui.tour.TourActivity}: android.view.InflateException: Binary XML file line #12: Error inflating class <unknown>

--------- Stack trace ---------
1. android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2649)
2. android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2674)
3. android.app.ActivityThread.access$2200(ActivityThread.java:131)
4. android.app.ActivityThread$H.handleMessage(ActivityThread.java:1975)
5. android.os.Handler.dispatchMessage(Handler.java:99)
6. android.os.Looper.loop(Looper.java:123)
7. android.app.ActivityThread.main(ActivityThread.java:4702)
8. java.lang.reflect.Method.invokeNative(Native Method)
9. java.lang.reflect.Method.invoke(Method.java:521)
10. com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
11. com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
12. dalvik.system.NativeStart.main(Native Method)
-------------------------------

----------- Cause -----------
android.view.InflateException: Binary XML file line #12: Error inflating class <unknown>

1. android.view.LayoutInflater.createView(LayoutInflater.java:513)
2. com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
3. android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
4. android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
5. android.view.LayoutInflater.rInflate(LayoutInflater.java:621)
6. android.view.LayoutInflater.inflate(LayoutInflater.java:382)
7. android.view.LayoutInflater.inflate(LayoutInflater.java:320)
8. android.view.LayoutInflater.inflate(LayoutInflater.java:276)
9. com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:208)
10. android.app.Activity.setContentView(Activity.java:1629)
11. com.solvek.sample.ui.BaseActivity.onCreate(BaseActivity.java:23)
12. com.solvek.sample.ui.tour.TourActivity.onCreate(TourActivity.java:161)
13. android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
14. android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2587)
15. android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2674)
16. android.app.ActivityThread.access$2200(ActivityThread.java:131)
17. android.app.ActivityThread$H.handleMessage(ActivityThread.java:1975)
18. android.os.Handler.dispatchMessage(Handler.java:99)
19. android.os.Looper.loop(Looper.java:123)
20. android.app.ActivityThread.main(ActivityThread.java:4702)
21. java.lang.reflect.Method.invokeNative(Native Method)
22. java.lang.reflect.Method.invoke(Method.java:521)
23. com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
24. com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
25. dalvik.system.NativeStart.main(Native Method)
-----------------------------

-------- Environment --------
Time =2010-12-20 08:27:35 AM
Device =tmobile/htc_espresso/espresso/espresso:2.1-update1/ERE27/216830:user/release-keys
Make =HTC
Model =T-Mobile myTouch 3G Slide
Product =htc_espresso
App =com.fsp.android.f, version 2.0.9 (build 1232)

Вот результат XML, однако такая ошибка возникает в других xmls

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <ViewFlipper android:layout_gravity="fill" android:id="@+id/flipper" android:layout_height="fill_parent" android:layout_width="fill_parent">
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_1"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_2"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_3"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_4"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_5"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_6"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_7"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_8"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_9"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_10"/>
        <ImageView android:scaleType="fitXY" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/tour_11"/>
    </ViewFlipper>

    <LinearLayout android:id="@+id/exit_bar" android:layout_gravity="top" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/blue_bar" android:visibility="invisible">
        <Button android:background="@drawable/orange_btn" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center" android:textStyle="bold" android:textColor="#000000" android:shadowColor="#ffffff" android:shadowRadius="1.6" android:shadowDx="1.5" android:shadowDy="1.3" android:id="@+id/exit_tour_btn" android:text="Exit" android:layout_marginLeft="20dip"/>
        <TextView android:layout_height="wrap_content" android:textColor="#ffffff" android:layout_gravity="center" android:layout_width="110dip" android:layout_marginLeft="20dip" android:textSize="16dip" android:textStyle="bold" android:text="Life360 Tour"/>

    </LinearLayout>

    <Button style="@style/BlueBtn" android:text="Continue" android:layout_marginTop="40dip" android:id="@+id/continue_btn" android:visibility="gone" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center" />

    <FrameLayout android:id="@+id/bottom_bar" android:layout_gravity="bottom" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/blue_bar" android:visibility="invisible">
        <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/left" android:layout_gravity="left|center" android:background="@drawable/tour_left" android:layout_marginLeft="10dip"/>
        <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/right" android:layout_gravity="right|center" android:background="@drawable/tour_right" android:layout_marginRight="10dip"/>               
    </FrameLayout>
</merge>
Solvek
источник
проверьте это. это помогает мне! stackoverflow.com/questions/9480972/android-tablelayout-error
user1974235

Ответы:

266

Исключение inflate на самом деле не является проблемой, но на самом деле возникает из-за более глубокой проблемы в макете, которая затем включается в InflateException. Распространенной проблемой является исключение нехватки памяти при попытке надувать изображение, загружая извлекаемый ресурс. Если один из этих ресурсов имеет высокое разрешение в пикселях, потребуется много памяти, что приведет к исключению раздувания.

Поэтому в основном убедитесь, что разрешение в пикселях на ваших рисованных изображениях - это минимум, необходимый для вашего макета.

vnportnoy
источник
4
@vnportnoy У меня также та же ошибка при удалении изображения
Харин Каклотар
4
Я полагаю, что в моем заявлении нет никаких отрисовок
Arturas M
3
Попробуйте проверить ваш языковой пакет, возможно, отсутствует строковый ресурс. Это было причиной проблемы в моем случае.
Мохаммед Субхи Шейх Куруш
Если ваша проблема с инструментальными тестами, то попробуйте это: stackoverflow.com/q/24904445
Джерри Дестремпс
После удаления viewview из моего xml все еще ошибка происходит в classpath 'com.android.tools.build:gradle:3.0.0-alpha2' и компилирует 'com.android.support.constraint: ограничение-макет: 1.0.2'
Subho
24

ViewFlipperзагружает все изображения в память во время раздувания макета. Потому что мои изображения большое это занимает много памяти, я заменил ViewFlipperс ImageSwitcherкоторой можно изменить изображения с анимацией , как , ViewFlipperно он загружает только один файл в то время.

Solvek
источник
23

Это также может произойти, если вы VectorDrawableиспользуете библиотеку поддержки using и забыли использовать app:srcCompatвместоandroid:src

Точная ошибка: строка двоичного XML-файла #XX: ошибка надувания класса ImageView

Смотрите эту ссылку

lujop
источник
Как только вы активируете это, вы всегда должны использовать приложение: srcCompat
Mohamed ALOUANE
Но это не приведет к случайному падению.
Менна-Аллах Сами
11

У меня была такая же ошибка при создании пользовательского представления только с одним конструктором, попробуйте определить все конструктор для ваших пользовательских представлений.

   public CustomWebView(Context context) {
        super(context);
        init();
    }

    public CustomWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public CustomWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }
Вильдан Мухлис
источник
11

Я знаю, что на вопрос уже дан ответ, но все же я пишу с мыслью, что кто-то может столкнуться с такой проблемой.

В моем случае проблема в том, что я загружаю свое приложение в телефон, который ссылается на макеты из res / layout / folder и значения для @dimens из res / values ​​/ Dimensions, здесь это font_22, к которому он пытается получить доступ, и он определен в res / values-xlarge. / Dimens.

Я на самом деле обновляю пользовательский интерфейс существующего проекта.

Я столкнулся с этой проблемой, потому что я использую IDE Eclipse, где я использую Ctrl + пробел для подсказки при написании XML для папки макета, он отображает все значения из значений, а также папку values-xlarge независимо от того, для какой папки я пишу.

Я также знаю, что значения в обоих файлах должны быть одинаковыми для сопоставления для разных экранов.

Надеюсь, что это может помочь кому-то столкнуться с такой глупой проблемой.

MobileEvangelist
источник
9

Я столкнулся с той же ошибкой и нашел причину:

Используйте контекст приложения, чтобы раздуть представление.

Раздувание с помощью Activity Context исправило ошибку.

рулевой
источник
6

Размер моего изображения составляет всего 14 КБ, но проблема в том, что дизайнер дал мне 1011px x 1819px (слишком высокое разрешение, поэтому возникает исключение InflateException)

Хан Хон Хо
источник
6

В случае, если у кого-то возникают подобные проблемы, у меня была такая проблема, когда я раздувал представление:

View.inflate(getApplicationContext(), R.layout.my_layout, null)

исправлено путем замены getApplicationContext()наthis

hedisam
источник
5

У меня была эта ошибка, потому что я выбрал тему в качестве темы материала. Но, поскольку я пытался запустить приложение на 4.4.2, оно выдало эту ошибку.

Решение: выберите Theme_holo в качестве темы

Лаквиндер Сингх Диллон
источник
Моя проблема может быть похожа на вашу, так как я вижу сбой только на 4.2.2. Но где я могу перейти от Материальной темы к Theme_holo? Я не вижу ключевое слово Материал в моем styles.xmlили v21/styles.xml. Смотрите мой вопрос: stackoverflow.com/questions/37883677/…
Катедраль Пиллон
4

Эта ссылка может вам помочь. Попробуйте проверить в своем манифесте проблемы. Если вы можете повторить это, опубликуйте всю трассировку стека, чтобы мы могли увидеть, в чем на самом деле ошибка.

РЕДАКТИРОВАТЬ: Я уверен, что вы это проверили, но что в строке 12 файла XML вы используете для макета TourActivity?

Кевин Коппок
источник
Я прочитал эту проблему. Это не мой случай (по крайней мере, я не вижу этого). Добавление стека к вопросу.
Solvek
Обновленный ответ, вы можете опубликовать XML? Если вы не возражаете, опубликуйте весь XML, если он не слишком большой.
Кевин Коппок
Добавлен XML в начальный вопрос
Solvek
Хм, к сожалению, у меня нет опыта использования слияния или ViewFlipper ... Все ли файлы XML, что это происходит с использованием слияния или ViewFlipper?
Кевин Коппок
Нет. Другие файлы не имеют слияния flipper, но все еще имеют ту же проблему.
Solvek
4

Для меня сообщения об ошибке на самом деле было недостаточно в журнале cat, поэтому вот что я сделал, чтобы выяснить, что вызвало проблему:

(В сообщении об ошибке журнала cat говорится, что ошибка произошла при накачке определенного макета в моем HomeFragment.java)

  1. Я поставил точку останова перед тем, как макет был раздут
  2. Я запускал приложение в режиме отладки, пока оно не достигло этой конкретной точки останова
  3. Я выделил строку курсором и побежал Evaluate expressionпо ней:
    • Run > Evaluate Expression или alt - F8
  4. Результат показал мне больше информации об источнике проблемы, которая в моем случае использовалась для рисования файла tools:targetApi="lollipop"(ошибка возникала только на старых устройствах).
Джулиан Хонма
источник
Спасибо! Это помогло мне найти проблему!
Сергей Стасишин
4

Я обнаружил ту же ошибку, и потребовалось два дня, чтобы определить, что это за ошибка.

Ошибка была просто потому, что я пытался использовать: android:background

Скорее, чем: app:srcCompat

в файле SVG.

В твоем случае я верю что это оно

<ImageView 
    android:scaleType="fitXY" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:src="@drawable/tour_11"      <-- the error is here !
 />

Я рекомендую использовать это таким образом

добавьте это в ваше приложение build.gradle

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }

и

<androidx.appcompat.widget.AppCompatImageView  <-- use **AppCompatImageView** not **ImageView**
        android:scaleType="fitXY" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        app:srcCompat="@drawable/tour_11"
     />

Надеюсь, это поможет.

Уильян Лопес
источник
3

Я знаю, что это ответ на вопрос, но я не вижу причины, с которой я столкнулся.

Дело в том, что Android Studio поместила мои drawables в / drawable-V24. Мой эмулятор - API 23. Так что, в конце концов, он не может его найти.

Решением было переместить все элементы рисования в папку / drawable (без -24).

alsaleem
источник
У меня тоже был такой же случай.
Рафаэль
3

Вы должны скопировать файлы изображений из папки drawable-24 в папку drawable.

Эмре Айдемир
источник
2

У меня была та же ошибка, и я решил переместить мои файлы рисования из папки drawable-mdpi в папку drawable. Мне потребовалось некоторое время, чтобы понять, потому что в Eclipse все работало идеально, в то время как в Android Studio я получал эти ужасные ошибки времени выполнения.

Примечание: если вы переходите с затмения на Android Studio и ваш проект исходит из затмения, это может произойти, поэтому будьте осторожны, так как в Android Studio все немного отличается от затмения.

отметка
источник
2

В моем случае эта ошибка возникает, когда я использую кнопку действия Floating и устанавливаю android:backgroundTint="#000". Тогда просто не ставьте backgroundTintи проблема решена. Надеюсь, это полезно для вас.

Луан Си Хо
источник
Спасибо, что это действительно проблема в моем случае. Нужно использовать app:backgroundTintвместо android:backgroundTint.
Драго
2

Для меня моей проблемой было то, что я был

android:background="?attr/selectableItemBackground"

На фоне LinearLayout, как только я удалил его, тест прошел.

Вал Окафор
источник
1

У меня была эта проблема только сейчас, и мне удалось выяснить, что это было. Ссылался на цвет в моих ценностях, который вызывал проблемы. Так что определили его вручную, вместо того, чтобы использовать одно из выпадающих предложений. Затем это сработало!

Джонатан Лалиберте
источник
1

У меня была та же ошибка, когда я запустил свое приложение по API lvl 16 (26 было в порядке). Это потому, что я использовал ?attrr/colorAccentв своей форме:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="8dp" />

    <solid android:color="@attr/colorAccent" />

</shape>

Замена на обычный цвет исправила мою проблему.

Михал Повлока
источник
1

У меня была та же проблема, и она была решена путем удаления drawable-v24 с (24) перед изображениями в папке drawable и заменой их на обычные drawables.

Гана Никрафтар
источник
1

Я знаю, что эта ветка старая, но все же отвечаю, чтобы никто другой не провел бессонные ночи.

Я проводил рефакторинг старого проекта, чьи файлы макетов содержали жестко закодированные атрибуты, такие как android:maxLength = 500. Поэтому я решил зарегистрировать его в моем res/dimenфайле как <dimen name="max_length">500</dimen>.

Закончен рефакторинг почти 30 файлов макетов с моим res-значением. Угадай, что? в следующий раз, когда я запустил свой проект, он начал бросать то же самое InflateException.

В качестве решения нужно было повторить все изменения и сохранить все те же значения, что и раньше.

TLDR;

Шаг 1: Все работает хорошо.

Шаг 2: Для повышения моего обслуживания я заменил android:maxLength = 500на, <dimen name="max_length">500</dimen>и android:maxLength = @dimen/max_lengthвот где все пошло не так (сбой с InflateException).

Шаг 3: Все плохо

Шаг 4: Повторно сделайте всю мою работу, снова заменив android:maxLength = @dimen/max_lengthнаandroid:maxLength = 500 исправлено.

Шаг 5: Все работает хорошо.

iCantC
источник
1

Решил это, переместив все мои нарисованные элементы из drawable-v24 в drawable

Эбен
источник
0

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

  1. Неправильный тег Layout в XML
  2. Загрузка тяжелых ресурсов непосредственно в ImageView, что приводит к OOM
  3. Проблемы с использованием стилей.

Одним из наиболее игнорируемых факторов может быть использование правильного контекста при накачивании представлений. Пожалуйста, убедитесь, что вы не используете ApplicationContext, где требуется контекст Activity. Пока, ApplicationContext может не всегда заканчиваться ошибкой, но в зависимости от вашей иерархии представлений это может иметь решающее значение.

Я решил свою проблему с BAD-контекстом (используя ApplicationContext вместо Activity в течение 4 дней! Поэтому попробуйте, если это решится. Счастливого кодирования !!

sud007
источник
0

Я столкнулся с той же проблемой, я использовал вид тега в XML вместо View. Замена на класс View устранила проблему.

Надеюсь, это поможет вам тоже ..

Кавья Шраван
источник
0

Нам нужно проверить версию API. Я использовал, чтобы придать цвет фона моему LinearLayoutлайку

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/as_royalblue"
        android:orientation="vertical"></LinearLayout>

наверняка у меня была такая же ошибка, as_royalblue.xmlвнутри drawableпапки

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="90"
        android:endColor="@color/royalblue_s"
        android:startColor="@color/royalblue_e" />
</shape>

и как я это исправил , на самом деле кажется, что проблема Api, поэтому нам нужно проверить уровень API, если он выше API 24, чтобы мы могли использовать то, что нам нравится. Но если он меньше 24, мы должны избегать использования, выступы дают нормальный цвет или один цвет, а не смешанный градиент цвета.

fun checkAPI_N(): Boolean {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N)
            return true
        else
            return false
    }

дать идентификатор вашим линейным макетам и установить фоны, если все в порядке

 if(UtilKotlin.checkAPI_N()){
            linlay_act_menu_container.setBackgroundResource(R.drawable.a_6)
            linlay_act_menu_logo.setBackgroundResource(R.drawable.as_strain)
        }else {//todo normal color background setting}
Сэм
источник
0

В моем случае я должен указать полное имя пакета компонента библиотеки UI, которое я использую в своем файле макета.

христианский мини
источник
0

Для меня это произошло потому, что я пытался смешать векторные изображения в формате xml с обычным png в одном файле макета,

только после того как я заменил векторную графику xml на pngs она начала работать

Даниил
источник
0
  • Я просто решил эту проблему, просто удалите ваши изображения из Drawable (v24) и просто вставьте его в папку Drawable, это работает для меня.

Muzammil
источник
0

У меня была та же ошибка Crashlyticsсо странного устройства: Motorola One Vision Android 5.1 и 20 ГБ (свободной) оперативной памяти, рутированные Это устройство изначально поставляется с Android 9.0, 4 ГБ оперативной памяти

Возможно, кто-то пытается взломать приложение, которое я сейчас разрабатываю, и у него проблемы с мульти-APK. Таким образом, ничья не может быть найдена, и приложение доставляет сбой

ГГК
источник