8

Ho avuto il seguente problema di rendering su tutti i miei layout quando si utilizza l'SDK 22 per visualizzarli in anteprima.Errore durante il gonfiaggio della classe android.support.v7.widget.Toolbar. Il mio errore o bug?

Error inflating class android.support.v7.widget.Toolbar.

java.lang.NoSuchFieldError: View_theme

Nel mio caso, il problema era styles.xml:

XML con il problema di rendering:

<resources> 

    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar" /> 
    <!-- Base application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 
     <item name="colorPrimary">@color/primary</item> 
     <item name="colorPrimaryDark">@color/primary_dark</item> 
     <item name="colorAccent">@color/accent</item> 
     <item name="android:textColorPrimary">@color/primary_text</item> 
    </style> 

</resources> 

XML senza problemi:

<resources> 

    <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar" /> 
    <!-- Base application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 
     <item name="colorPrimary">@color/primary</item> 
     <item name="colorPrimaryDark">@color/primary_dark</item> 
     <item name="colorAccent">@color/accent</item> 
     <item name="android:textColorPrimary">@color/primary_text</item> 
    </style> 

</resources> 

Notate come ho dovuto aggiungere @style/ nel riferimento genitore. Questo sembra risolvere il mio problema (dopo una ricostruzione).

Domanda, si tratta di un errore da parte mia o di un bug? Molti tutorial non metterlo (Including Official Android Page)

Gradle:

compileSdkVersion 22 
buildToolsVersion '22.0.1' 
minSdkVersion 15 
targetSdkVersion 22 
classpath 'com.android.tools.build:gradle:1.1.0' 

finale Nota: non sto usando barra degli strumenti.

+0

vedere questo [link] [1] questo può aiutare [1]: http://stackoverflow.com/questions/29005958/android-sdk-22-searchview-rendering-problems/29822819#29822819 –

+0

@Nilesh, nel mio caso, io sono in grado di noi e SDK 22, ma solo se aggiungo '@ style'. Non è necessario eseguire il downgrade all'SDK 21. – gian1200

+0

Non eseguire il downgrade dell'SDK modifica solo l'API 22-21 nel file di layout .i.e anteprima dal 22 al 21 –

risposta

4

EDIT:

lettura da un altro SO question.

Se la vostra attività si estende AppCompactActivity, il tema genitore dovrebbe essere

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar" /> 

dove, come, se si utilizza ActionBarActivity, tema dovrebbe essere

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar" /> 

I think the difference is on purpose, and not a bug. Please feel free to correct me if i am wrong as i cannot conferm the same from anywhere yet.

VECCHIO:

Per utilizzare la barra degli strumenti come a barra, la prima cosa che devi fare è disabilitare la barra delle azioni fornita. Il modo più semplice è estendere il tema da Theme.AppCompat.NoActionBar (o dalla variante light).

Usa:

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar" /> 

From this post.

+1

Questo è vero solo quando sto usando "Toolbar", ma non lo sono. – gian1200

+0

Quale attività si estende alla tua classe? ActionBarActivity o AppCompactActivity? –

+0

Prima dell'aggiornamento, ActionBarActivity. Ora utilizzo AppCompactActivity. – gian1200

2

Nel mio caso, la soluzione è stata semplice come

  1. Aggiungere @style al tema genitore

    <style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> 
    
  2. rimuovere android.support.v7.widget. da Toolbar

  3. passaggio da app:theme al android:theme

    <Toolbar 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/toolbar" 
        android:layout_height="wrap_content" 
        android:layout_width="match_parent" 
        android:minHeight="?attr/actionBarSize" 
        android:background="?attr/colorPrimary" 
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />