theme - material design android example




Qualcuno può spiegare l'attr? (4)

Sto guardando il codice di esempio di Honeycomb Gallery ( here ) e ho trovato il seguente codice mentre provavo ad aggiungere elementi di azione nella mia app:

<item android:id="@+id/camera"
    android:title="Camera"
    android:icon="?attr/menuIconCamera"
    android:showAsAction="ifRoom" />

Il ?attr mi sta lanciando per un ciclo. Qualcuno può spiegare cosa sta facendo? Com'è collegato a un drawable? Non riesco a trovare alcuna buona informazione su Google. C'è anche una lista o una galleria di attributi che possiamo usare per le icone invece di solo menuIconCamera ?

Grazie

Edit: Ho fatto ancora un po 'di ricerche e ho scoperto che attrs.xml ha questo aspetto:

<resources>
<declare-styleable name="AppTheme">
    <attr name="listDragShadowBackground" format="reference" />
    <attr name="menuIconCamera" format="reference" />
    <attr name="menuIconToggle" format="reference" />
    <attr name="menuIconShare" format="reference" />
</declare-styleable>

Sfortunatamente questo mi rende ancora più confuso. Cosa sta facendo?


Il mio inglese non è buono, mi dispiace. Ma conosco questa domanda

android:icon="?attr/menuIconCamera" voglio usare

attrs.xml

<resources>
    <declare-styleable name="AppTheme">
        <attr name="listDragShadowBackground" format="reference" />
        <attr name="menuIconCamera" format="reference" />
        <attr name="menuIconToggle" format="reference" />
        <attr name="menuIconShare" format="reference" />
    </declare-styleable>
</resources>

styles.xml

<style name="AppTheme.Light" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/ActionBar.Light</item>
        <item name="android:windowActionBarOverlay">true</item>
        <item name="listDragShadowBackground">@android:color/background_light</item>
        <item name="menuIconCamera">@drawable/ic_menu_camera_holo_light</item> //this....
        <item name="menuIconToggle">@drawable/ic_menu_toggle_holo_light</item>
        <item name="menuIconShare">@drawable/ic_menu_share_holo_light</item>
    </style>

usa @drawable/ic_menu_camera_holo_light


Il valore ?attr/menuIconCamera indica che verrà utilizzata un'icona dall'attributo menuIconCamera del tema corrente.

Deve esserci un drawable assegnato all'attributo menuIconCamera da qualche parte nel file themes.xml . Se ci sono due temi con valori diversi di questo attributo, l'icona effettiva dipenderà da un tema attualmente utilizzato.

Il file attrs.xml è usato per definire attributi personalizzati. Senza questa definizione il compilatore tratterà gli attributi sconosciuti come errati.



So che questo post è molto vecchio, ma sento che la seguente spiegazione aiuterà i principianti a capirlo facilmente.

Quindi, in parole povere,

someAttribute="?attr/attributeName" significa -

imposta il valore di someAttribute su qualunque sia il valore di attributeName nel tema corrente

Un esempio comune si verifica nello stile di una barra degli strumenti

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary_color</item>
       //some more stuff here
</style>
<!-- custom toolbar style -->
<style name="myToolbar" parent="Widget.AppCompat.Toolbar">
      <item name="android:background">?attr/colorPrimary</item>
     //some code here
</style>

Qui il valore di android:background sarà impostato su @color/primary_color perché ?attr/colorPrimary riferisce a @color/primary_color nel tema corrente (AppTheme)





android-theme