2015-06-19 10 views
18

Zaimplementowałem nowy kod CollapsingToolbarLayout z kodu przykładowego Chris Banes.CollapsingToolbarLayout: Zmień kolor przycisku strony głównej po rozwinięciu

Jednak obrazy widoku tła mają całe białe tło. Motyw paska narzędzi to ThemeOverlay.AppCompat.Dark.ActionBar, więc ikony są również białe, dlatego nie widzę przycisku strony głównej, gdy funkcja CollapseingToolbarLayout jest w pełni rozwinięta.

Dzięki app:expandedTitleTextAppearance mogę ustawić kolor pola tytułu. Czy istnieje również możliwość ustawienia koloru przycisków głównych i ikon menu?

Odpowiedz

0

W moich oczach jest to możliwe tylko po zmianie rysunków przycisku głównego, ikon menu i przycisku przepełnienia. Na szczęście firma Google udostępniła nam nowy interfejs API o nazwie Tinted Drawables, który pozwala nam ustawić kolor obrazu do rysowania lub dziewięciu łatek. Oto jak to działa:

<?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"/> 

Teraz można korzystać z tej nowej zdefiniowany Drawable jak każdy inny w swoim układzie. Dla przycisku home i przycisk przelewowym trzeba też zastąpić definicje stylów tak:

<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> 

Wszystkie te rzeczy (oprócz definicji stylu) jest niestety dostępna tylko na poziomie API 21+ i nie wchodzi w skład Zespołu biblioteka wsparcia. Jeśli musisz wspierać urządzenia niższe niż Lollipop, myślę, że najlepszym sposobem jest użycie Android Assets Studio, gdzie możesz odcień ikon samodzielnie i pobrać je jako plik png.

0

przycisk home, przycisk przelewowy, a niektóre wybór ikon stock sdk wpływa colorControlNormal:

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

Jeśli masz inne ikony, trzeba byłoby pętli i ręcznie filtrować je:

@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

Oto przykład jak zmienić moje szuflady i ikony opcji koloru, gdy układ jest rozwinięty i upadł:

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); 
        } 
     } 
}); 
Powiązane problemy