Araç Çubuğu ana sayfa simgesinin rengi nasıl değiştirilir


108

Bir android.support.v7.widget.Toolbar kullanıyorum ve bu yazıdan hamburger simgesinin rengini beyaza nasıl değiştireceğimi öğrendim , ancak yukarı / geri oku aradığımda koyu renk kalıyor

setDisplayHomeAsUpEnabled(true);

Oku da nasıl beyaz yapabilirim?

SetDisplayHomeAsUpEnabled () öğesini çağırdığımda araç çubuğum şöyle görünüyor:

görüntü açıklamasını buraya girin

... ve işte styles.xml dosyamın ilgili kısmı:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">#194C5F</item>
    <item name="colorAccent">@color/accent</item>
    <item name="drawerArrowStyle">@style/WhiteDrawerIconStyle</item>
</style>

    <style name="WhiteDrawerIconStyle" parent="Widget.AppCompat.DrawerArrowToggle">
        <item name="spinBars">true</item>
        <item name="color">@android:color/white</item>
    </style>

2
Beyaz ok png simgesini kullanabilir ve siyah olanla değiştirebilirsiniz.
Surender Kumar

1
Bundan kaçınmaya çalışıyorum ve sadece bir rengi stil olarak belirtiyorum ... Eğer bunu actionBarDrawerToggle.setHomeAsUpIndicator (R.drawable.arrow) ile yapabileceğimi bildiğim tek yol buysa;
Joshua W

... ayrıca png /com.android.support/appcompat-v7/21.0.3/res/drawable-xxxhdpi/abc_ic_ab_back_mtrl_am_alpha.png beyaz görünür
Joshua W

@JoshuaWitter Teşekkürler sorunumu çözdü, ayrıca geri düğmesini tıklamamı tespit etmeme yardımcı olur musunuz? sorum şu: stackoverflow.com/questions/29138629/…
user2056563

1
@JoshuaWitter beyaz olsa bile renkli oluyor. colorControlNormalDeğeri değiştir
osrl

Yanıtlar:


242

Styles.xml dosyasını düzenleyerek çözdüm:

<style name="ToolbarColoredBackArrow" parent="AppTheme">
    <item name="android:textColorSecondary">INSERT_COLOR_HERE</item>
</style>

... sonra aktivitede Araç Çubuğu tanımındaki stile başvurarak:

<LinearLayout
    android:id="@+id/main_parent_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/toolbar"
        app:theme="@style/ToolbarColoredBackArrow"
        app:popupTheme="@style/AppTheme"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"/>

13
Ayrıca colorControlNormalbunun yerine ayarlayabilirsinizandroid:textColorSecondary
mbelsky

ama bu tüm widget'ın rengini değiştirecek değil mi? @mbelsky
Dr. aNdRO

3
@mbelsky API seviyesi 21'i gerektirdiğine dikkat edin.
Francisco Romero


Merhabalar, Kodunuzu denedim ama gerekli sonucu alamıyorum. Toolbar.axml dosyamda kurulum teması android: theme=@style/ThemeOverlay.AppCompat.Dark.ActionBar ve styles.axml dosyamda verdiğiniz kodu yazdım, ancak navigasyon çubuğu geri düğmesi renginde değişiklik yok.
Deepak

57

İşte aradığınız şey. Ama bu aynı zamanda radioButton vb. Rengini de değiştirir. Dolayısıyla bunun için bir tema kullanmak isteyebilirsiniz.

<item name="colorControlNormal">@color/colorControlNormal</item>

11
Kabul edilen cevap bu olmalıdır. Bu aradığımı sağlıyor: <style name = "ActionBarTheme" parent = "ThemeOverlay.AppCompat.Dark.ActionBar"> <item name = "colorControlNormal"> ### COLOR ### </item> </style> temayı doğrudan Araç Çubuğuna uygulayın.
Mavamaarten

1
Ebeveyn niteliği çok önemlidir.
ataravati

36

Bu kodu kullanarak programlı olarak çözdüm:

final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(Color.parseColor("#FFFFFF"), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);

Revizyon 1:

API 23'ten (Marshmallow) başlayarak, çekilebilir kaynak abc_ic_ab_back_mtrl_am_alphaolarak değiştirilir abc_ic_ab_back_material.


5
bunu da ayarlayın. getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Ishan Fernando

Bu bir işe yarar Fragmentmı? Öyleyse, bu kodu nereye koyacağım? OnCreateViewYöntem, sınıfın kök, yoksa ...?
AndroidDevBro

1
@AndroidDevBro Evet, sadece OnCreate işlevine koyun ve kaynağı Nouman Tahir'in revizyonda yazdığı gibi güncellemeyi unutmayın (R.drawable.abc_ic_ab_back_mtrl_am_alpha yerine R.drawable.abc_ic_ab_back_material kullanarak) ve SupportActionBar'ı şu şekilde edin: ((AppCompat) getActivity ()). getSupportActionBar (). setHomeAsUpIndicator (upArrow);
PayToPwn

14

Bu cevap çok geç olabilir, ama işte bunu nasıl yapıyorum. Araç çubuğunun stilini ayarlamak işinizi görecektir. Aşağıdaki kodla toolbar.xml oluşturun.

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:layout_alignParentTop="true"
android:layout_gravity="bottom"
local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

ve styles.xml dosyasında

<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!--
    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
</style>

Son olarak, araç çubuğunu düzene dahil edin

<include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />

1
ancak AppTheme hiçbir yerde referans gösterilmez. bu bir yazım hatası mı?
Henry

11

Araç Çubuğu Temanızı ThemeOverlay.AppCompat.Dark olarak değiştirin

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:orientation="vertical"
    app:theme="@style/ThemeOverlay.AppCompat.Dark">

</android.support.v7.widget.Toolbar>

ve onu aktif hale getirin

mToolbar = (Toolbar) findViewById(R.id.navigation);
setSupportActionBar(mToolbar);

1
Diğer cevaplara şaşırdım, her zaman bu yöntemi kullanırım
C.Skjerdal

9
   <!-- ToolBar -->
    <style name="ToolBarTheme.ToolBarStyle"    parent="ThemeOverlay.AppCompat.Dark.ActionBar">
        <item name="android:textColorPrimary">@android:color/white</item>
        <item name="android:textColor">@color/white</item>
        <item name="android:textColorPrimaryInverse">@color/white</item>
    </style>

Göndermek için çok geç, bu, geri düğmesinin rengini değiştirmem için çalıştı


8

Bunu yapmanın daha kolay bir yolu var

drawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.open_drawer, R.string.close_drawer);
arrow = drawerToggle.getDrawerArrowDrawable();

Ve sonra

arrow.setColor(getResources().getColor(R.color.blue);

7

Stil değişiklikleri yerine, bu iki kod satırını aktivitenize ekleyin.

getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.arrowleft);

6

İşte benim çözümüm:

toolbar.navigationIcon?.mutate()?.let {
  it.setTint(theColor)
  toolbar.navigationIcon = it
}

Veya bunun için güzel bir işlev kullanmak istiyorsanız:

fun Toolbar.setNavigationIconColor(@ColorInt color: Int) = navigationIcon?.mutate()?.let {
    it.setTint(color)
    this.navigationIcon = it
}

Kullanım:

toolbar.setNavitationIconColor(someColor)

Bu açık arayla en iyi cevap ve sorunumu çözüyor
Zaraki596

5

Bu kod benim için çalışıyor:

public static Drawable changeBackArrowColor(Context context, int color) {
    String resName;
    int res;

    resName = Build.VERSION.SDK_INT >= 23 ? "abc_ic_ab_back_material" : "abc_ic_ab_back_mtrl_am_alpha";
    res = context.getResources().getIdentifier(resName, "drawable", context.getPackageName());

    final Drawable upArrow = context.getResources().getDrawable(res);
    upArrow.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);

    return upArrow;
}

...

getSupportActionBar().setHomeAsUpIndicator(changeBackArrowColor(this, Color.rgb(50, 50, 50)));               
supportInvalidateOptionsMenu();

Ayrıca, araç çubuğu metin rengini değiştirmek isterseniz:

Spannable spannableString = new SpannableString(t);
spannableString.setSpan(new ForegroundColorSpan(Color.rgb(50, 50, 50)), 0, t.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
toolbar.setText(spannableString);

API 19'dan 25'e kadar çalışıyor.


0

Daha eski çekilebilir id " abc_ic_ab_back_material " kullanmak yerine , her api sürümünde yeni bir abc_ic_ab_back_material kullanın . 19, 21, 27'de test ettim ve aşağıdaki kod ve konfigürasyonla iyi çalışıyorum.

  • minSdkVersion = 17
  • targetSdkVersion = 26
  • compileSdkVersion = 27

    public static Drawable changeBackArrowColor(Context context, int color) {
    int res;
    res = context.getResources().getIdentifier("abc_ic_ab_back_material", "drawable", context.getPackageName());
    if (res == 0)
        return null;
    final Drawable upArrow = ContextCompat.getDrawable(context, res);
    upArrow.setColorFilter(ContextCompat.getColor(context, color), PorterDuff.Mode.SRC_ATOP);
    
    return upArrow;

    }


0

Şunu deneyin: Araç çubuğunun temasını düzeninizde aşağıdaki gibi ayarlayın

android:theme = "@android:style/ThemeOverlay.Material.Dark.ActionBar"

Daha fazla bilgi istiyorsanız

Martin Bonnin'den Overflow Icon Color'ın ilginç durumu

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.