2013-03-05 14 views
10

ho aggiornato il mio progetto da Android 4.2 ad Android 4.2.2 e improvvisamente ho ottenere questo errore nel mio styles.xml:Tematizzazione ActionBarSherlock dà errore di livello API

<style name="Theme.Styled" parent="Theme.Sherlock.Light.DarkActionBar"> 
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item> 
    <!-- Requires level 11. Current: 7 --> <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item> 
</style> 

Come posso risolvere questo problema? Secondo i documenti ABS, è così che dovrebbe essere fatto. Vedi: http://actionbarsherlock.com/theming.html

+0

controlla 'minSdkVersion' nel file manifest ... –

+0

qual è il tuo obiettivo e la versione sdk minima in manifest? – waqaslam

+0

Ha funzionato prima su 4.2 – Klaasvaak

risposta

11

ho provato a riavviare, ma in ultima analisi necessario per pulire il progetto: Fare clic su "Progetto-> Clean ..."

L'errore è tornato ogni volta che ho salvato il mio styles.xml. Per ora, sto impostando temporaneamente il mio livello API minimo su 11 durante la modifica di quel file per evitare gli errori, e quindi ripristinarlo e pulirlo quando voglio eseguirlo sul mio emulatore low-API-level.

Edit: Se non ti piace lasciare la vostra versione SDK min artificialmente alti, funziona anche per me di cambiare a 14 (un altro numero elevato), salvo AndroidManifest.xml, cambiarlo terzino destro, e salva di nuovo.

+0

Hai ragione. Ogni volta che si modifica styles.xml si attiva l'errore. Quando si pulisce il progetto (nessuna generazione) l'errore è scomparso. Quando si genera il progetto con styles.xml chiuso, l'errore è scomparso. Quindi puoi costruirlo con un livello API inferiore e deve solo essere chiuso. – Klaasvaak

+0

@jgiles, stai usando OSX? Sto vivendo lo stesso problema con ADT v21.1.0-569685 su OSX.Il mio collega di lavoro su Windows non vede tali errori su Windows, eseguendo esattamente lo stesso progetto. – nipponese

+0

No, sto usando Ubuntu. – jgiles

10

ho usato la soluzione rapida suggerito di Eclipse (CTRL-1 sull'elemento sottolineato) e appena aggiunto la soppressione di avvertimento strumenti: ignorare = "NewApi"

<item name="android:actionBarStyle" tools:ignore="NewApi">@style/Widget.Styled.ActionBar</item> 

In questo modo non c'è bisogno per ignorare l'intero avviso Lint, che potrebbe essere utile in altri casi, e puoi compilare il progetto senza dover modificare l'API di destinazione ogni volta che modifichi il file.

Aggiornamento: Come sottolineato da greg7gkb nei commenti: Non dimenticare la dichiarazione dello spazio dei nomi (xmlns:tools="schemas.android.com/tools").

+5

Soluzione ideale - grazie. Non dimenticare che devi anche dichiarare xmlns: tools = "http://schemas.android.com/tools" nell'xml. – greg7gkb

+0

Ah grazie per il commento, greg7gkb. Tendo a dimenticare gli spazi dei nomi, specialmente quando Eclipse li inserisce automaticamente;) – Patrick

+0

+1 per la nota che Eclipse può inserirli automaticamente tramite la correzione rapida. – Natix

0

In IntelliJ IDEA (presumibilmente anche Eclipse) è possibile eliminare gli avvisi API per l'intero file aggiungendo

<!--suppress AndroidLintNewApi --> 

prima di dichiarare lo schema. Quindi il file XML sarebbe quindi simile a questa:

<!--suppress AndroidLintNewApi --> 
<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    < ... /> 
</resources> 
1

In definitiva, si dovrebbe aggiungere l'attributo che si sta dando l'errore in un file styles.xml specifica API.

Questo SO risposta descrive questo molto meglio di me: android:actionBarStyle requires API level 11

Credo che tutte le altre risposte non sono correzioni, ma work-around (sovvertire l'errore, ma alla fine non risolverlo).