2011-01-23 18 views
38

¿Cuál es la diferencia entre "? Android:" y "@android:" en un archivo xml de diseño de Android? Parecen ser formas intercambiables de reutilizar los recursos del SDK de Android.¿Cuál es la diferencia entre "? Android:" y "@android:" en un archivo xml de diseño de Android?

La única diferencia que descubrí se ilustra con el siguiente ejemplo.

Aquí borde derecho de la Vista de Texto se representa alineado con el borde izquierdo de la 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> 

Aquí, sin embargo, el borde derecho de la TextView está alineado con el borde derecho de la RelativeLayout. TextView se superpone al 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> 

La única diferencia entre los dos diseños es el uso de @android vs? Android. Ambos compilan sin errores.

Muchas gracias.

+0

duplicado posible de [(?) Signo de interrogación en los atributos XML para Android] (http://stackoverflow.com/questions/2733907/question-mark-in- xml-attributes-for-android) –

Respuesta

33

La prefijación del ID con un signo de interrogación indica que desea acceder a un atributo de estilo definido en un tema de estilo, en lugar de codificar el atributo.

Ver "Cómo hacer referencia Atributos de estilo" aquí: accessing-resources

+4

Más específicamente, el? implica un nivel extra de indirección. Piénselo como desreferenciando un atributo de tema para captar el recurso al que apunta en lugar de referirse al atributo en sí. Ves esto con '? Android: attr/foo'. – adamp

+7

Ojalá hubiera más explicación en esta respuesta – CodyBugstein

+0

@Imray, aquí hay un ejemplo: Encontré estos estilos del archivo themes.xml que se encuentra en sdk \ platforms \ android-L \ data \ res \ values. ' ​​ @ android: el color/bright_foreground_dark ​​@ android: el color/bright_foreground_holo_dark ' Los artículos se hace referencia en en el archivo attrs.xml en el mismo directorio. – chjarder

Cuestiones relacionadas