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

114

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

21 ответ

238
Лучший ответ

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

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

  • 3
    @vnportnoy У меня также та же ошибка при удалении изображения
  • 3
    Я полагаю, что у меня нет никаких рисований в моем приложении
Показать ещё 3 комментария
25

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

18

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

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

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

  • 0
    Как только вы активируете это, вы всегда должны использовать app: srcCompat
  • 0
    Но это не приведет к случайному падению.
9

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

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

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

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

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

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

6

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

   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();
    }
  • 0
    Вы уверены, что эта проблема связана с этим ???
  • 1
    @SumitKumarSaha не знаю, но у меня это работает
Показать ещё 1 комментарий
5

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

4

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

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

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

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

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

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

4

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

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

  • 0
    Я прочитал эту проблему. Это не мой случай (по крайней мере, я этого не вижу). Добавление стека к вопросу.
  • 0
    Обновленный ответ, вы можете опубликовать XML? Если вы не возражаете, опубликуйте весь XML, если он не слишком большой.
Показать ещё 4 комментария
3

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

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

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

3

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

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

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

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

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

1

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

1

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

0

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

0

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

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

0

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

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

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

  • 0
    У меня тоже был такой же случай.
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, нам нужно избегать использования, 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}
0

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

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

0

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

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

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

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

0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню