android.view.InflateException: riga di file XML binario # 12: errore durante il gonfiaggio della classe <sconosciuto>


147

Ricevo molti errori del tipo visualizzati nel subj. Questi errori sembrano essere occasionali e non riesco a riprodurli. Dallo stack posso imparare che tale errore può verificarsi per le mie diverse risorse di layout. Anche la linea di XML è variabile.

Qualcuno può spiegare perché si verifica questo errore? E cosa posso fare per risolvere questo problema?

Pila

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

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)

Ecco un risultato di XML, tuttavia tale errore si verifica in altri 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>

Risposte:


266

L'eccezione infllate non è in realtà il problema, ma proviene davvero da un altro problema più profondo nel layout che viene quindi racchiuso in InflateException. Un problema comune è un'eccezione di memoria insufficiente quando si tenta di gonfiare un'immagine visualizzata caricando una risorsa estraibile. Se una di queste risorse ha una risoluzione pixel elevata, ci vorrebbe molta memoria causando quindi un'eccezione di gonfiaggio.

Quindi, in pratica, verifica che la risoluzione dei pixel nelle immagini dei tuoi disegni sia solo il minimo necessario per il tuo layout.


4
@vnportnoy Ho anche lo stesso errore quando rimuovo l'immagine
Harin Kaklotar

4
Credo di non avere disegnabili nella mia domanda
Arturas M

3
Prova a controllare il pacchetto di lingue, probabilmente manca una risorsa stringa. Questo stava causando un problema nel mio caso.
Mohammed Subhi Sheikh Quroush,

Se il problema è con i test di strumentazione, quindi provare questo: stackoverflow.com/q/24904445
Jerry Destremps

Dopo aver rimosso l'immagine visualizzata dal mio XML, l'errore si verifica ancora nel percorso di classe 'com.android.tools.build:gradle:3.0.0-alpha2' e compila 'com.android.support.constraint: Vincolo-layout: 1.0.2'
Subho,

24

ViewFlippercarica tutte le immagini in memoria durante il gonfiaggio del layout. Poiché le mie immagini sono grandi, ci vuole molta memoria, le ho sostituite ViewFlippercon quelle ImageSwitcherche possono cambiare le immagini con animazioni simili ViewFlipperma carica solo un'immagine alla volta.


23

Questo può accadere anche se usi una VectorDrawablelibreria di supporto usando e hai dimenticato di usare app:srcCompatinvece diandroid:src

L'errore esatto è: riga del file XML binario #XX: errore durante il gonfiaggio della classe ImageView

Vedi quel link


Una volta attivato, dovresti sempre usare l'app: srcCompat
Mohamed ALOUANE

Ma questo non genererà crash casuale.
Menna-Allah Sami,

11

Ho avuto lo stesso errore durante la creazione di una vista personalizzata con un solo costruttore, prova a definire tutto il costruttore per le tue viste personalizzate.

   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

So che la domanda ha già una risposta, ma sto ancora postando con il pensiero che qualcuno potrebbe incontrare questo tipo di problema.

Nel mio caso il problema è che sto caricando la mia applicazione sul telefono che fa riferimento a layout da res / layout / cartella e valori per @dimens da res / valori / dimens qui è font_22 a cui sta tentando di accedere ed è definito in res / valori-xlarge / dimens.

In realtà sto aggiornando l'interfaccia utente del progetto esistente.

Ho riscontrato questo problema perché sto usando IDE Eclipse in cui ctrl + spazio per il suggerimento durante la scrittura di xml per la cartella di layout mostra tutti i valori dai valori e la cartella valori-xlarge indipendentemente da quale cartella sto scrivendo.

So anche che i valori in entrambi i file dovrebbero essere uguali a quelli mappati per schermate diverse.

Spero che questo possa aiutare qualcuno a imbattersi in questo tipo di problema sciocco.


9

Ho riscontrato lo stesso bug e ho scoperto che il motivo principale è:

Utilizzare il contesto dell'applicazione per gonfiare la vista.

Il gonfiamento con Activity Context ha risolto il bug.


6

La mia dimensione dell'immagine è di soli 14 KB, ma il problema è che il progettista mi ha dato 1011 px x 1819 px (risoluzione troppo alta, causando quindi InflateException)


6

Nel caso in cui qualcuno ottenga problemi simili, ho avuto un problema simile mentre gonfiavo la vista:

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

riparato sostituendo getApplicationContext()conthis


5

Ho avuto questo errore perché ho selezionato il tema come tema Materiale. Ma mentre stavo cercando di eseguire l'app su 4.4.2 ha dato questo errore.

Soluzione: selezionare Theme_holo come tema


Il mio problema potrebbe essere simile al tuo poiché vedo solo l'incidente 4.2.2. Ma dove cambio dal tema Materiale a Theme_holo? Non vedo la parola chiave Materiale nel mio styles.xmlo v21/styles.xml. Vedi la mia domanda: stackoverflow.com/questions/37883677/…
Katedral Pillon,

4

Questo link può aiutarti. Prova a controllare nel tuo manifest per problemi. Se riesci a riaccenderlo, pubblica l'intera traccia dello stack in modo che possiamo vedere quale sia effettivamente l'errore.

EDIT: Sono sicuro che hai controllato questo, ma cosa c'è nella riga 12 del file XML che usi per il layout TourActivity?


Ho letto questo problema. Questo non è il mio caso (almeno non riesco a vederlo). Aggiunta di stack alla domanda.
Solvek, il

Risposta aggiornata, puoi pubblicare l'XML? Se non ti dispiace, pubblica l'intero XML se non è troppo grande.
Kevin Coppock,

Aggiunto XML alla domanda iniziale
Solvek,

Hmm, sfortunatamente non ho esperienza con l'uso di Merge o ViewFlipper ... Tutti i file XML che ciò accade con l'uso si fondono o ViewFlipper?
Kevin Coppock,

No. Altri file non hanno l'unione di flipper ma hanno ancora lo stesso problema.
Solvek,

4

Per me, il messaggio di errore era effettivamente insufficiente nel log cat, quindi ecco cosa ho fatto per capire cosa ha causato il problema:

(Nel messaggio di errore del gatto di registro, si diceva che l'errore si verificava durante il gonfiaggio di un layout specifico nel mio HomeFragment.java)

  1. Ho messo un punto di interruzione poco prima che il layout fosse gonfiato
  2. Ho eseguito l'applicazione in modalità debug fino a raggiungere quel punto di interruzione specifico
  3. Ho selezionato la linea con il cursore e ho corso Evaluate expressionsu di essa:
    • Run > Evaluate Expression o alt - F8
  4. Il risultato mi ha mostrato ulteriori informazioni sulla fonte del problema, che nel mio caso era un file disegnabile usando tools:targetApi="lollipop"(il bug si verificava solo su dispositivi più vecchi).

Grazie! Questo mi ha aiutato a trovare il problema!
Sergey Stasishin

4

Ho trovato lo stesso errore e ci sono voluti due giorni per identificare quale fosse l'errore.

L'errore era semplicemente perché stavo cercando di usare: android:background

Piuttosto che: app:srcCompat

in un file SVG.

Nel tuo caso, credo che sia così

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

Consiglio di usarlo in questo modo

aggiungilo alla tua app build.gradle

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }

e

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

Spero che aiuti.


3

So che è una domanda con risposta, ma non vedo la causa che ho affrontato.

È stato che Android Studio ha inserito i miei drawable in / drawable-V24 Il mio emulatore è API 23. Quindi, alla fine, non riesce a trovarlo.

La soluzione era spostare tutti i disegni estraibili nella cartella / drawable (no -24).


Ho avuto anche lo stesso caso.
Rafael,

3

Dovresti copiare i file immagine dalla cartella "drawable-24" alla cartella "drawable".


2

Ho avuto lo stesso errore e ho risolto lo spostamento dei miei drawable dalla cartella drawable-mdpi alla cartella drawable. Mi ci è voluto un po 'di tempo per rendermi conto perché in Eclipse tutto ha funzionato perfettamente mentre in Android Studio ho avuto questi brutti errori di runtime.

Modifica nota: se stai migrando da eclissi ad Android Studio e il tuo progetto proviene da eclissi, potrebbe accadere, quindi fai attenzione che in Android Studio le cose siano leggermente diverse da eclissi.


2

Nel mio caso, questo errore si verifica quando utilizzo il pulsante di azione mobile e imposto android:backgroundTint="#000". Quindi non impostare backgroundTinte risolvere il problema. Spero ti sia utile.


Grazie che era davvero il problema nel mio caso. È necessario utilizzare app:backgroundTintinvece di android:backgroundTint.
Drago,

2

Per me, il mio problema era che lo ero

android:background="?attr/selectableItemBackground"

A uno sfondo LinearLayout, una volta rimosso il test è passato.


1

Ho avuto questo problema proprio ora e sono riuscito a capire di cosa si trattasse. Faceva riferimento a un colore nei miei valori che stava causando problemi. Così lo definivo manualmente invece di usarne uno dai suggerimenti del menu a discesa. Quindi ha funzionato!


1

Ho avuto lo stesso errore quando ho eseguito la mia app su API lvl 16 (26 andava bene). È stato perché ho usato ?attrr/colorAccentnella mia forma disegnabile:

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

Sostituirlo con un colore normale ha risolto il mio problema.


1

ho avuto lo stesso problema e ho risolto rimuovendo drawable-v24 con (24) davanti alle immagini nella cartella drawable e sostituendole con normali drawable.


1

So che questo thread è vecchio, ma rispondo ancora in modo che nessun altro debba passare notti insonni.

Stavo refactoring di un vecchio progetto, i cui file di layout contenevano tutti attributi hardcoded come android:maxLength = 500. Così ho deciso di registrarlo nel mio res/dimenfile come <dimen name="max_length">500</dimen>.

Ho completato il refactoring di quasi 30 file di layout con il mio valore di res. Indovina un po? la prossima volta che ho eseguito il mio progetto ha iniziato a lanciare lo stesso InflateException.

Come soluzione, avevo bisogno di ripetere tutte le mie modifiche e mantenere tutti quei valori come prima.

TLDR;

passaggio 1: tutto funziona bene.

passo 2: per aumentare la mia manutenzione ho sostituito android:maxLength = 500con <dimen name="max_length">500</dimen>e android:maxLength = @dimen/max_length, è lì che è andato tutto storto (crash con InflateException).

passaggio 3: tutto funziona male

passaggio 4: rifare tutto il mio lavoro sostituendo nuovamente android:maxLength = @dimen/max_lengthcon. android:maxLength = 500Tutto è stato risolto.

passaggio 5: tutto funziona bene.


1

Risolto spostando tutti i miei oggetti disegnabili da drawable-v24 a drawable


0

Ho anche affrontato un problema simile. Mentre per chiunque questo potrebbe essere un problema di vari usi errati nel Codice come

  1. Tag layout errato in XML
  2. Caricamento di risorse pesanti direttamente in ImageView con conseguente OOM
  3. Problemi con l'utilizzo degli stili.

Uno dei fattori più ignorati potrebbe essere l' uso del contesto corretto mentre si gonfiano le viste. Verifica di non utilizzare ApplicationContext dove è richiesto un contesto di attività. Mentre ApplicationContext potrebbe non finire sempre in errore, ma a seconda della gerarchia della vista potrebbe essere cruciale.

Ho risolto il mio problema con un MALE contesto (usando ApplicationContext invece di Attività in un arco di 4 giorni! Quindi prova se questo risolve. Buona codifica !!


0

Avevo affrontato lo stesso problema, avevo usato il tag view in xml anziché View. La sostituzione con la classe View ha risolto il problema.

Spero che aiuti anche per te ..


0

Dobbiamo controllare la versione dell'API. Ho usato per dare il colore di sfondo al mio LinearLayoutlike

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

di sicuro ho avuto lo stesso errore, as_royalblue.xmlall'interno della drawablecartella

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

e come l'ho risolto , in realtà sembra un problema di Api, quindi dobbiamo controllare il livello di API se è al di sopra dell'API 24, quindi siamo in grado di usare il modo che ci piace. Ma se è inferiore a 24, dobbiamo evitare l'uso, le sporgenze danno un colore normale o un colore non mescolato in modo graduale.

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

dai un id ai tuoi linearlayout e imposta gli sfondi se è ok

 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

Nel mio caso, devo specificare il nome del pacchetto completo del componente dell'interfaccia utente della libreria che utilizzo nel mio file di layout.


0

Per me è successo perché ho cercato di mescolare immagini grafiche vettoriali xml con png ordinario nello stesso file di layout,

solo dopo aver sostituito la grafica vettoriale xml con pngs ha iniziato a funzionare


0
  • Ho appena risolto questo problema, basta eliminare le tue immagini da drawable (v24) e incollarlo in una cartella drawable che funziona per me.


0

Ho avuto lo stesso errore Crashlyticsda uno strano dispositivo: Motorola One Vision Android 5.1 e 20 GB (gratuito) RAM, con root Questo dispositivo viene originariamente con Android 9.0, 4 GB RAM

Probabilmente qualcuno sta cercando di hackerare l'app che sto attualmente sviluppando e ha problemi con i multi-APK. Quindi non è possibile trovare i drawable e l'app offre l'arresto anomalo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.