2016-02-17 34 views
5

Negli esempi di stile del Android-genitori sono definiti come questoXML in genitore

<style name="GreenText" parent="@android:style/TextAppearance"> 

ma nelle fonti Android trovo

<style name="Widget.AppCompat.ActionBar.TabText" parent="Base.Widget.AppCompat.ActionBar.TabText"> 

cosa è la differenza quando ho prefisso con @style e @android: stile o no?

risposta

0

In generale, se si mette "@android" di fronte a qualcosa, vuol dire che siete alla ricerca di una risorsa definita in Android pacchetto, non nel tuo progetto.

Per esempio, se si sta cercando di ottenere un colore:

android:background="@android:color/holo_red_dark" 

In questo modo ottenere il colore holo_red_dark Android. Non hai questo colore definito nel tuo progetto.

android:background="@color/my_red_color" 

Questo otterrà il "mio_ro_color" definito nel progetto.

Lo stesso vale per gli stili.

EDIT: La cosa è che non c'è alcuna differenza tra

parent="@style/MyStyle" 

e

parent="MyStyle" 

per uno stile compilato nel progetto. Potresti anche scrivere

<style name="Widget.AppCompat.ActionBar.TabText" parent="@style/Base.Widget.AppCompat.ActionBar.TabText"> 

e funzionerebbe.

Pertanto, tenendo conto che il modulo di progetto Base.Widget.AppCompat.ActionBar.TabText è compilato nella libreria di supporto, è possibile aggiungerlo con @style come prefisso o senza. Tuttavia, @android:style/TextAppearance proviene dal pacchetto Android ed è per questo che devi specificare @android: come prefisso.

spero sia chiaro ora

+0

sì questa è la differenza tra \ @android: style e \ @style, ma sto cercando la differenza tra parent = "\ @ style/TextAppearance" e parent = "TextAppearance" – wutzebaer

+0

ok significa che non vi è alcuna differenza né aggiungendo il \ @stato prefisso all'attributo padre o no? – wutzebaer

+0

Sì - solo quando lo stile di riferimento è definito nel progetto (da te, dallo sviluppatore o in qualsiasi libreria che hai aggiunto - in questo caso, la libreria di supporto). – DDsix

0

Perché gli sviluppatori nelle fonti ereditano lo stile che si sono definiti.

Se si definisce

<style name="CodeFont" parent="@android:style/TextAppearance"> 
     <item name="android:textColor">#00FF00</item> 
    </style> 

Non è necessario scrivere un genitore da stili, ma può solo scrivere

<style name="CodeFont.Red"> 
    <item name="android:textColor">#FF0000</item> 
</style> 

in questo modo.

Spiegazione da qui http://developer.android.com/guide/topics/ui/themes.html#Inheritance

Si noti che non v'è alcun attributo padre nel tag <style>, ma perché l'attributo nome inizia con il nome di stile CodeFont (che è uno stile che si è creato), questo stile eredita tutto Proprietà di stile da quello stile. Questo stile sovrascrive la proprietà android: textColor per rendere il testo rosso. Puoi fare riferimento a questo nuovo stile come @ style/CodeFont.Red.

È possibile continuare ad ereditare in questo modo tutte le volte che si desidera, concatenando nomi con punti. Ad esempio, è possibile estendere CodeFont.Red di essere più grande, con:

<style name="CodeFont.Red.Big"> 
    <item name="android:textSize">30sp</item> 
</style> 
+1

ma se io uso l'attributo parrent, c'è una differenza quando ho prefisso con "@ stile /"? – wutzebaer

+0

Se è il tuo stile, puoi specificarlo senza @style, altrimenti devi metterlo prima del nome dello stile. – davrog

+0

ma ho usato spesso stili che non sono miei senza il prefisso: