2012-10-19 2 views
13

Stavo usando il seguente codice sulla mia applicazione per impostare la mia icona di casa ad una specifica drawable:Posso impostare l'icona home della mia barra delle azioni usando styles.xml?

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setIcon(R.drawable.ic_menu); 
getSupportActionBar().setDisplayShowTitleEnabled(false); 

Ma ho avuto problemi con il "ritardo" tra "la creazione della vista arredamento e la mia onCreate esecuzione", come spiegato qui da Jake Wharton: ActionBar Lag in hiding title

sul link qui sopra la soluzione era quella di creare un nuovo stile, e dichiarare nel manifesto, e così ho fatto:

<resources> 
<style name="AppTheme" parent="android:Theme.Light" /> 

<style name="WATheme" parent="Theme.Sherlock.Light"> 
    <item name="android:actionBarStyle">@style/WATheme.ActionBar</item> 
    <item name="actionBarStyle">@style/WATheme.ActionBar</item> 
</style> 

<style name="WATheme.ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid"> 
    <item name="android:displayOptions">homeAsUp|showHome</item> 
    <item name="displayOptions">homeAsUp|showHome</item> 
</style> 
</resources> 

manifesto:

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:theme="@style/WATheme" 
     android:label="@string/title_activity_main" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

Si sta lavorando bene, ho il mio tasto home con un massimo di configurazione, ma ho ancora voglia di cambiare l'icona a un'altra drawable specifica, solo in questa attività, senza dover modificare qualsiasi android:icon nel manifesto. Come posso ottenerlo?

Spero sia stato abbastanza chiaro. Grazie.

risposta

27

Ok, immagina solo cosa mancava. Su styles.xml, tutto quello che dovevo fare è aggiungere le seguenti righe:

<item name="android:icon">@drawable/ic_menu</item> 
<item name="icon">@drawable/ic_menu</item> 

Così alla fine ho qualcosa di simile:

<resources> 
<style name="AppTheme" parent="android:Theme.Light" /> 

<style name="WATheme" parent="Theme.Sherlock.Light"> 
    <item name="android:actionBarStyle">@style/WATheme.ActionBar</item> 
    <item name="actionBarStyle">@style/WATheme.ActionBar</item> 
    <item name="android:icon">@drawable/ic_menu</item> 
    <item name="icon">@drawable/ic_menu</item> 
</style> 

<style name="WATheme.ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid"> 
    <item name="android:displayOptions">homeAsUp|showHome|showTitle</item> 
    <item name="displayOptions">homeAsUp|showHome|showTitle</item> 
</style> 
</resources> 

funziona bene ora, con tutti i displayOptions impostato correttamente e senza "ritardi". :)

+0

Grazie, RenanFerrari. Proprio quello che stavo cercando. – BruceHill