2011-01-23 1 views
38

Qual è la differenza tra "? Android:" e "@android:" in un file xml di Android layout? Sembrano essere modi intercambiabili per riutilizzare le risorse di Android SDK.Qual è la differenza tra "? Android:" e "@android:" in un file xml di Android?

L'unica differenza che ho scoperto è illustrata dal seguente esempio.

Qui il bordo destro del TextView è reso allineato con il bordo sinistro del ImageButton

<RelativeLayout 
    android:id="@id/header" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#888888"> 
    <TextView 
     android:id="@android:id/text1" 
     android:layout_alignParentLeft="true" 
     android:text="blah blah" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_toLeftOf="@android:id/button1" /> 
    <ImageButton 
     android:id="@android:id/button1" 
     android:layout_alignParentRight="true" 
     style="@style/PlusButton" /> 
</RelativeLayout> 

Qui, però, il bordo destro del TextView sia allineato con il bordo destro del RelativeLayout. TextView si sovrappone a ImageButton.

<RelativeLayout 
    android:id="@id/header" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#888888"> 
    <TextView 
     android:id="@android:id/text1" 
     android:layout_alignParentLeft="true" 
     android:text="blah blah" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_toLeftOf="?android:id/button1" /> 
    <ImageButton 
     android:id="?android:id/button1" 
     android:layout_alignParentRight="true" 
     style="@style/PlusButton" /> 
</RelativeLayout> 

L'unica differenza tra i due layout è l'utilizzo di @android vs? Android. Entrambi compilano senza errori.

Grazie mille.

+0

Possibile duplicato del [(?) Punto interrogativo in attributi XML per Android] (http://stackoverflow.com/questions/2733907/question-mark-in- xml-attributes-per-android) –

risposta

33

La prefissazione dell'ID con un punto interrogativo indica che si desidera accedere a un attributo di stile definito in un tema di stile piuttosto che codificare l'attributo.

Vedere "Riferimento attributi di uno stile" qui: accessing-resources

+4

In particolare, il? implica un ulteriore livello di riferimento indiretto. Consideralo come dereferenziare un attributo theme per recuperare la risorsa a cui punta piuttosto che fare riferimento all'attributo stesso. Lo vedi con '? Android: attr/foo'. – adamp

+7

Vorrei che ci fosse più spiegazione in questa risposta – CodyBugstein

+0

@Imray, ecco un esempio: ho trovato questi stili dal file themes.xml trovato in sdk \ piattaforme \ android-L \ data \ res \ valori. ' ​​ @ Android: colore/bright_foreground_dark ​​@ Android: colore/bright_foreground_holo_dark ' Gli elementi citati nel sul file attrs.xml nella stessa directory. – chjarder