2012-06-22 17 views
12

Sto provando a modellare i pulsanti per assomigliare a quelli che chiedo in Android Full Width ICS style Minimalist Bottom ButtonsViews.Stili Android: Differenza tra 'style = "@ android: style/XYZ"' e 'style = "? Android: attr/XYZ"'?

sono riuscito, con il seguente codice XML per chiunque sia interessato:

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="bottom" 
     android:divider="@android:drawable/divider_horizontal_dark" 
     android:gravity="bottom" 
     android:orientation="vertical" 
     android:paddingTop="16dip" 
     android:showDividers="beginning|end" > 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:measureWithLargestChild="true" 
      android:orientation="horizontal" 
      android:divider="@android:drawable/divider_horizontal_dark" 
      android:showDividers="middle" >        


      <Button 
       android:id="@+id/cancel_button" 
       style="?android:attr/buttonBarButtonStyle" 
       android:layout_width="0dip" 
       android:layout_height="wrap_content" 
       android:layout_gravity="left" 
       android:layout_weight="1" 
       android:maxLines="2" 
       android:text="@string/cancel_button" /> 

      <Button 
       android:id="@+id/login_button" 
       style="?android:attr/buttonBarButtonStyle" 
       android:layout_width="0dip" 
       android:layout_height="wrap_content" 
       android:layout_gravity="right" 
       android:layout_weight="1" 
       android:filterTouchesWhenObscured="true" 
       android:maxLines="2" 
       android:text="@string/login_button" /> 

     </LinearLayout> 
    </LinearLayout> 

Una domanda però. Il contenuto eclisse assistere non ha idea di quello che sta accadendo con la seguente risoluzione risorsa:

style="?android:attr/buttonBarButtonStyle"

ho familiarità con la risoluzione tipica (che il contenuto di Eclipse assist è consapevole)

[email protected]/style/...

... ma non sono chiaro sulla differenza tra i due. Sembra che alcuni attributi di stile appaiano in uno ma non nell'altro. Per esempio, il seguente non risolve a nulla:

[email protected]:attr/buttonBarStyle

e nemmeno questo:

style="@android:style/buttonBarStyle

Quindi credo che due domande qui:

  1. Perché differenza nella sintassi di riferimento alle risorse?
  2. Perché l'errata classificazione errata degli stili in una categoria attr.
  3. Qual è la categoria attr anche utilizzata di nuovo?

Grazie!

risposta

13

Da another answer su SO (parafrasato qui):

Utilizzando un punto interrogativo davanti a un ID significa che si desidera accedere a un attributo di stile che è definito in un tema in stile, piuttosto che hardcoding l'attributo.

Pensatelo come un dereferenziamento di un attributo tema per recuperare la risorsa a cui punta piuttosto che fare riferimento all'attributo stesso.

Referencing Style Attributes

1

Android: attr/buttonBarButtonStyle o semplicemente Android:?? ButtonBarButtonStyle - (attr è facoltativo)

<item name="buttonBarButtonStyle">@android:style/Widget.Button</item> 

Questo dereferenzia internamente per @android: stile/Widget.Button che è definito all'interno del file appcompat/res/values ​​/ themes.xml.

(? Android :) - collega sempre al valore dell'attributo dal tema corrente applicato. Così permettendoci di riferire lo stile definito da Android solo piuttosto creando uno nuovo e fornendo un valore hardcoded.

Google Doc, dice, "It uses the style that is defined by this attribute, in the current theme"

Problemi correlati