2015-06-19 29 views
18

Ho implementato il nuovo CollapsingToolbarLayout dal codice di esempio di Chris Banes.CollapsingToolbarLayout: modifica il colore del pulsante home quando espanso

Tuttavia, le immagini per la vista dell'immagine sullo sfondo hanno tutto uno sfondo bianco. Il tema della barra degli strumenti è ThemeOverlay.AppCompat.Dark.ActionBar quindi anche le icone sono bianche, quindi non riesco a vedere il pulsante Home quando il CollapsingToolbarLayout è completamente espanso.

Con app:expandedTitleTextAppearance posso impostare il colore per il campo del titolo. C'è anche la possibilità di impostare il colore dei pulsanti home e delle icone del menu?

risposta

0

Ai miei occhi ciò è possibile solo se si modificano i drawable del pulsante home, le icone di menu e il pulsante di overflow. Fortunatamente Google ci ha fornito una nuova API chiamata Tinted Drawables che ci consente di impostare il collettore di un'immagine drawable o nove patch. Ecco come funziona:

<?xml version="1.0" encoding="utf-8"?> 
<bitmap 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@android:drawable/ic_menu_camera" 
    android:tint="@color/menu_icon_color"/> 

Ora è possibile utilizzare questa nuova definizione Drawable come qualsiasi altro nel layout. Per il tasto home e il tasto di overflow si hanno anche per sostituire le definizioni di stile in questo modo:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="android:homeAsUpIndicator">@drawable/tinted_home_button</item> 
    <item name="android:actionOverflowButtonStyle">@style/OverFlowButton</item> 
</style> 

<style name="OverFlowButton" parent="AppTheme"> 
    <item name="android:src">@drawable/tinted_overflow_button</item> 
</style> 

Tutte queste cose (tranne le definizioni di stile) è purtroppo disponibile solo sul livello di API 21+ e non è incluso nella libreria di supporto. Se devi supportare dispositivi inferiori a Lollipop, ritengo che il modo migliore sia utilizzare lo Android Assets Studio dove puoi colorare le icone da solo e scaricarle come file png.

0

Il tasto home, il tasto di troppo pieno, e alcune selezionate icone di riserva dalla sdk sono affetti da colorControlNormal:

<style name="ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> 
    <item name="colorControlNormal">@color/accent</item> 
</style> 

Se si dispone di altre icone, si avrebbe bisogno di scorrere manualmente filtrarli:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.sample_actions, menu); 

    for(int i = 0; i < menu.size(); i++){ 
     Drawable drawable = menu.getItem(i).getIcon(); 
     if(drawable != null) { 
      drawable.mutate(); 
      drawable.setColorFilter(getResources().getColor(R.color.accent), PorterDuff.Mode.SRC_ATOP); 
     } 
    } 

    return true; 
} 
4

Ecco l'esempio di come cambiare il mio cassetto e opzioni di icone di colore quando il layout è espansa ed è crollato:

protected void onCreate(Bundle savedInstanceState) { 
      AppBarLayout appBarLayout = (AppBarLayout) findViewById(R.id.app_bar_layout); 
      appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { 
       @Override 
       public void onOffsetChanged(AppBarLayout appBarLayout, int offset) 
       { 
        Drawable upArrow = ResourcesCompat.getDrawable(getResources(), R.drawable.drawer_icon, null); 
        if (offset < -200) 
        { 
         upArrow.setColorFilter(Color.parseColor("#000000"), PorterDuff.Mode.SRC_ATOP); 
         getSupportActionBar().setHomeAsUpIndicator(upArrow); 

         Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.option_menu_icon); 
         drawable.setColorFilter(Color.parseColor("#000000"), PorterDuff.Mode.SRC_ATOP); 
         toolbar.setOverflowIcon(drawable); 
        } 
        else 
        { 

         upArrow.setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP); 
         getSupportActionBar().setHomeAsUpIndicator(upArrow); 
         getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

         Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.option_menu_icon); 
         drawable.setColorFilter(Color.parseColor("#ffffff"), PorterDuff.Mode.SRC_ATOP); 
         toolbar.setOverflowIcon(drawable); 
        } 
     } 
}); 
Problemi correlati