टूलबार होम आइकन रंग कैसे बदलें


108

मैं एक android.support.v7.widget.Toolbar का उपयोग कर रहा हूं और इस पोस्ट से सीखा कि हैमबर्गर आइकन का रंग सफेद करने के लिए कैसे बदलें, लेकिन जब मैं कॉल करता हूं तो ऊपर / पीछे तीर एक गहरे रंग का रहता है

setDisplayHomeAsUpEnabled(true);

मैं तीर को सफेद कैसे बना सकता हूं?

जब मैं setDisplayHomeAsUpEnabled () को कॉल करता हूं तो यहां मेरा टूलबार कैसा दिखता है:

यहां छवि विवरण दर्ज करें

... और यहाँ मेरे style.xml फ़ाइल का प्रासंगिक हिस्सा है:

<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
आप सफेद तीर png आइकन का उपयोग कर सकते हैं और काले के साथ बदल सकते हैं।
सुरेंद्र कुमार

1
मैं इससे बचने की कोशिश कर रहा हूं और बस एक शैली के रूप में एक रंग का संकेत देता हूं ... अगर यह एकमात्र तरीका है जो मुझे पता है कि मैं इसे कर सकता हूं कार्रवाई के माध्यम से कर सकता हूं।
जोशुआ डब्ल्यू

... यह भी png /com.android.support/appcompat-v7/21.0.3/res/drawable-xxxhdpi/abc_ic_ab_back_mtrl_am_alpha.png सफेद दिखाई देता है
जोशुआ डब्ल्यू

@JoshuaWitter धन्यवाद यह मेरी समस्या हल हो गई, क्या आप कृपया बैक बटन पर क्लिक का पता लगाने में भी मेरी मदद कर सकते हैं? यहाँ मेरा सवाल है stackoverflow.com/questions/29138629/…
user2056563

1
@ जोशवाटर सफेद होने पर भी रंग जाता है। colorControlNormalमान बदलें
osrl

जवाबों:


242

मैंने इसे style.xml के संपादन द्वारा हल किया:

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

... फिर गतिविधि में टूलबार परिभाषा में शैली को संदर्भित करता है:

<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
इसके अलावा आप इसके colorControlNormalबजाय सेट कर सकते हैंandroid:textColorSecondary
mbelsky

लेकिन यह पूरे विजेट का रंग सही बदल देगा? @mbelsky
डॉ। ANdRO

3
@mbelsky ध्यान दें कि इसके लिए एपीआई स्तर 21 की आवश्यकता है।
फ्रांसिस्को रोमेरो

@ Error404: यह एपीआई स्तर 1 में जोड़ा गया है जैसा कि आप यहां
मोहम्मद हेटम एबडू

हाय सब, मैंने आपके कोड की कोशिश की है लेकिन मुझे अपेक्षित परिणाम नहीं मिल रहा है। मेरी टूलबार.एक्सएमएल फ़ाइल में मैं सेटअप थीम एंड्रॉइड हूं: theme=@style/ThemeOverlay.AppCompat.Dark.ActionBar और अपनी शैलियों में ।axml फ़ाइल में मैंने आपके दिए गए कोड को लिखा है लेकिन बिना किसी बदलाव के नेविगेशन बार बैक बटन कलर।
दीपक

57

यहाँ तुम क्या देख रहे हो। लेकिन इससे रेडियोबटन आदि का रंग भी बदल जाता है, इसलिए आप इसके लिए एक थीम का उपयोग करना चाहते हैं।

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

11
यह स्वीकृत उत्तर होना चाहिए। यह वह चीज हासिल करता है जिसकी मुझे तलाश थी: <style name = "ActionBarTheme" parent = "ThemeOverlay.AppCompat.Dark.ActionBar"> <आइटम का नाम = "colorControlNormal"> ###OROR ### </ आइटम> </ style>। थीम को सीधे टूलबार पर लागू करें।
मावामार्टन

1
मूल विशेषता बहुत महत्वपूर्ण है।
अरावती

36

मैंने इस कोड का उपयोग करके इसे प्रोग्रामेटिक रूप से हल किया:

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

संशोधन 1:

एपीआई 23 (मार्शमैलो) से शुरू होने वाले ड्रॉबल रिसोर्स abc_ic_ab_back_mtrl_am_alphaको बदल दिया जाता है abc_ic_ab_back_material


5
यह भी एक सेट करें। getSupportActionBar().setDisplayHomeAsUpEnabled(true);
इशान फर्नांडो

क्या यह काम करेगा Fragment? यदि हां, तो मैं इस कोड को कहां रखूंगा? OnCreateViewविधि, वर्ग की जड़ है, या ...?
AndroidDevBro

1
@AndroidDevBro हाँ, बस इसे OnCreate फ़ंक्शन में रखें और संसाधन को अपडेट करने के लिए याद रखें क्योंकि संशोधन में Nouman ताहिर ने लिखा था (R.drawable.abc_ic_ab_back_material के बजाय R.drawable.abc_ic_ab_back_mtrl_am_alpha) और समर्थन प्राप्त कर रहा है। । getActivity ()) getSupportActionBar () setHomeAsUpIndicator (upArrow)।
PayToPwn

14

यह उत्तर शायद बहुत देर हो चुकी है, लेकिन यहाँ है कि मैं इसे कैसे करता हूं। टूलबार की स्टाइलिंग ट्रिक करेगी। निम्नलिखित कोड के साथ toolbar.xml बनाएं।

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

और style.xml में

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

अंत में, लेआउट के अंदर टूलबार शामिल करें

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

1
लेकिन AppTheme कहीं भी संदर्भित नहीं है। क्या यह एक टाइपो है?
हेनरी

11

अपने टूलबार थीम को ThemeOverlay.AppCompat.Dark में बदलें

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

और इसे सक्रियता में सेट करें

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

1
मैं अन्य उत्तरों से हैरान था, मैं हमेशा इस पद्धति का उपयोग करता हूं
सी। स्केजेराल्ड

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>

पोस्ट करने में बहुत देर हो गई, इसने मेरे लिए बैक बटन का रंग बदलने का काम किया


8

वैसे ऐसा करने का एक और आसान तरीका है

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

और तब

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

7

स्टाइल में बदलाव के बजाय, कोड की इन दो पंक्तियों को अपनी गतिविधि में रखें।

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

6

यहाँ मेरा समाधान है:

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

या, यदि आप इसके लिए एक अच्छे कार्य का उपयोग करना चाहते हैं:

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

उपयोग:

toolbar.setNavitationIconColor(someColor)

यह अब तक का सबसे अच्छा जवाब है और यह मेरी समस्या हल करता है
ज़राकी 596

5

यह कोड मेरे लिए काम करता है:

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();

इसके अलावा, यदि आप टूलबार टेक्स्ट का रंग बदलना चाहते हैं:

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

एपीआई 19 से 25 के माध्यम से कार्य करना।


0

पुरानी ड्रा करने योग्य आईडी " abc_ic_ab_back_material " का उपयोग करने के बजाय , प्रत्येक एपीआई संस्करण में नए एक abc_ic_ab_back_material का उपयोग करें । मैंने इसे 19, 21, 27 में परीक्षण किया है और नीचे दिए गए कोड और कॉन्फ़िगरेशन के साथ ठीक काम कर रहा हूं।

  • 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

इसे आज़माएँ: टूलबार की थीम को अपने लेआउट में निम्नानुसार सेट करें

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

यदि आप अधिक जानकारी चाहते हैं

मार्टिन बोनिन द्वारा ओवरफ्लो आइकन कलर का उत्सुक मामला

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.