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

Я получаю много ошибок вида, отображаемых в 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>

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

См. эту ссылку

Ответ 4

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

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

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

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

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

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

Ответ 5

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

   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();
    }

Ответ 6

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

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

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

Ответ 10

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

EDIT: я уверен, что вы это проверили, но что находится в строке 12 XML файла, который вы используете для макета TourActivity?

Ответ 11

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

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

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

Ответ 12

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

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

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

Ответ 13

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

Ответ 14

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

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

Ответ 15

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

Ответ 16

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

Ответ 17

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

Ошибка была просто потому, что я пытался использовать один: 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 !
 />

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

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

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

Ответ 18

У меня была такая же ошибка, когда я запускал свое приложение на 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>

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

Ответ 19

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

Ответ 20

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

Я проводил рефакторинг старого проекта, все файлы макетов которого были жестко закодированы такие атрибуты, как 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: Все работает хорошо.

Ответ 21

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

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

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

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

Ответ 22

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

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

Ответ 23

Нам нужно проверить версию 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, нам нужно избегать использования, juts дают нормальный цвет или один цвет, а не градиент цвета, смешанный один.

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

дайте id своим линейным вычислениям и задайте фоны, если это нормально

 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}

Ответ 24

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

Ответ 25

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

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

Ответ 26

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