2014-10-14 10 views
15

Sono nuovo nello sviluppo di Android e mi chiedo cosa succede se si utilizzano attributi su tag XML da un livello API superiore a minSdkVersion.Utilizzo di attributi dal livello API oltre minSdkVersion

Per esempio avere:

<uses-sdk 
    android:minSdkVersion="9" 
    android:targetSdkVersion="20" /> 

E poi con questo:

<activity android:logo="@drawable/iconwhatever"></activity> 

Il "android: logo" attributo è dal livello di API 11.

In Android Studio dà la seguente errore, ma voglio sapere cosa potrebbe accadere se questo è lasciato solo:

Attribute "logo" is only used in API level 11 and higher. (Current min is 9) 

Qualsiasi aiuto in merito sarebbe molto apprezzato.

+0

Il logo è utilizzato in ** ActionBar **. Puoi utilizzare ** ActionBarCompat **, per supportare i dispositivi più vecchi: http://developer.android.com/guide/topics/ui/actionbar.html –

risposta

23

attributi non supportati vengono ignorati.

Da SDK documentation:

Quando parsing risorse XML, Android ignora gli attributi XML che non sono supportati dal dispositivo corrente. Quindi puoi tranquillamente utilizzare gli attributi XML che sono supportati solo dalle versioni più recenti senza preoccuparti di interruzioni di versioni precedenti quando incontrano quel codice.

+0

Ottima risposta. Grazie per il link. –

+2

Questa non è affatto la verità. Per esempio, sto proprio ora ottenendo degli arresti anomali a causa dell'uso del background drawable in cui il drawable è l'effetto a catena dei pulsanti. Si sta bloccando, perché nel drawable ho lollipop targetApi (v21) ma sto provando a eseguire l'app su API v19. Arresto anomalo su android.view.InflateException: riga di file XML binaria n. 10: Errore durante la generazione della classe piggy

+0

@piggy è dovuto al fatto che l'attributo non è supportato su API 19 o perché il valore dell'attributo non è supportato? – Erik

2

Per gli attributi XML, è sicuro utilizzare gli attributi dalle nuove API (saranno semplicemente ignorati in quanto il parser XML non li cercherà nemmeno nelle versioni precedenti).

0

In questo caso, la manipolazione di attributi che sono API diverse deve essere effettuata tramite codice e non in XML.

In codice, è possibile trattarlo.

Ad esempio:

if(Build.Version.SDK_INT > 10){ 

    .... use an attribute 

    } 
else{ 

    .... use other 
} 

Per il vostro caso specifico, utilizzare "icona"

<activity android:icon="@drawable/iconwhatever"></activity> 
Problemi correlati