2017-04-21 27 views
8

मेरे पास मेरे एंड्रॉइड ऐप में android.support.v7.widget टूलबार है। इसका पृष्ठभूमि रंग उज्ज्वल नारंगी है और इसके ऊपर सबसे अच्छा दिखने वाला रंग काला के बजाय सफेद होगा।बदलें टूलबार ओवरफ़्लो आइकन रंग

मेरे पास काले रंग का डिफ़ॉल्ट रंग है और सफेद नहीं है। चूंकि यह अन्य सामानों के साथ संघर्ष करेगा, यह ओवरराइड करना लगभग असंभव है। मैं प्राथमिक टेक्स्ट रंग को सफेद में नहीं बदल सकता!

मैंने शीर्षक रंग बदलने में कामयाब रहा है। जो मैं अभी ढूंढ रहा हूं वह यह है कि मैं एक्शन बटन रंग को कैसे बदल सकता हूं (सफेद तक)।

enter image description here

धन्यवाद

संपादित करें: सहित कोड अब

मुख्य गतिविधि:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
tools:context=".UI.activities.MainActivity"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/r2_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:elevation="4dp" 
    app:titleTextColor="@color/primary_text_material_light" 
    app:subtitleTextColor="@color/primary_text_material_light" 
    android:theme="@style/R2Theme.Toolbar"/> 

<fragment android:name="com.r2retail.r2retailapp.UI.fragments.SetupFragment" 
    android:layout_below="@+id/r2_toolbar" 
    android:id="@+id/list" 
    android:layout_weight="1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 


</RelativeLayout> 

मेनू बार:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<item android:id="@+id/about" 
    android:icon="@drawable/ic_menu" 
    android:title="About" 
    app:showAsAction="never"/> 

</menu> 

शैलियाँ:

<resources> 

<style name="R2Theme" parent="Theme.AppCompat.Light.NoActionBar">= 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorPrimary</item> 
    <item name="android:textColorPrimary">@color/secondary_text_material_dark</item> 
    <item name="android:textColorSecondaryInverse">@color/primary_text_material_light</item> 
</style> 

<style name="R2Theme.Toolbar" parent="R2Theme"> 
    <item name="actionMenuTextColor">@color/primary_text_material_light</item> 
</style> 

</resources> 
+0

अपने कोड सामान है कि उस बटन के साथ उपकरण पट्टी शामिल दिखाएं। –

+0

@SatanPandeya मैंने कोड –

+0

जोड़ा है क्या आईसी_मेनू रंग को कस्टमाइज़ करने का कोई तरीका नहीं है, सीधे 'फाइलकोलर' को बदलने जैसी फ़ाइल से? –

उत्तर

17

शैलियों में:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    ... 
    <item name="actionOverflowButtonStyle">@style/MyOverflowButtonStyle</item> 
</style> 

<style name="MyOverflowButtonStyle" parent="Widget.AppCompat.ActionButton.Overflow"> 
    <item name="android:tint">#62ff00</item> 
</style> 

परिणाम:

enter image description here

+2

अंत में, कुछ सादगी! बिना किसी हिचकिचाहट के सेकंड में काम किया। सही समाधान धन्यवाद! –

1

समाधान आइकन को प्रतिस्थापित करना है।

जाओ को valuse/शैलियों और अपने styles.xml फ़ाइल जोड़ने में:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item> 
</style> 

<style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.Light.ActionButton.Overflow"> 
    <!--Here you need to put name of drawable you will create during the next step--> 
    <item name="android:src">@drawable/your_white_icon</item> 
</style> 

फिर drawable फ़ोल्डर में यात्रा करते हैं। दायां माउस क्लिक करें -> नया -> वेक्टर संपत्ति। फिर आइकन छवि पर दबाएं और ic_more_vert_black_24dp नामित सुझाए गए आइकन से चुनें।

इसे अनुकूलित करें -> अगला दबाएं -> समाप्त करें।

फिर नव निर्मित आइकन फ़ाइल खोलें। कोड इस तरह दिखता है।

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
     android:width="24dp" 
     android:height="24dp" 
     android:viewportWidth="24.0" 
     android:viewportHeight="24.0"> 
    <path 
     android:fillColor="#FFFFFFFF" <!-- Here u can change color--> 
     android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/> 
</vector> 

fillColor बदलें जिस रंग की आपको आवश्यकता है उसे बदलें। इस फ़ाइल को शैलियों में रखें जो पहले चरण में वर्णित है।

वोला! हमारे का रंग तीन बिंदु आधार ऐप शैलियों (# FF2012 रंग के परिणाम) के आधार पर नहीं बदला गया।

enter image description here

0

एक वैकल्पिक तरीका, एक्सएमएल के बजाय कोड में:

public static boolean colorizeToolbarOverflowButton(@NonNull Toolbar toolbar, @ColorInt int color) { 
    final Drawable overflowIcon = toolbar.getOverflowIcon(); 
    if (overflowIcon == null) 
     return false; 
    toolbar.setOverflowIcon(getTintedDrawable(toolbar.getContext(), overflowIcon, toolbarIconsColor)); 
    return true; 
} 

public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Drawable inputDrawable, @ColorInt int color) { 
    Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable); 
    DrawableCompat.setTint(wrapDrawable, color); 
    DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN); 
    return wrapDrawable; 
} 

ओवरफ्लो आइकन को रंगीन करने में सफल होने पर फ़ंक्शन सत्य वापस आ जाएगा।

और एक और विकल्प, मामले में आपके पास अपनी पसंदीदा रंगा हुआ drawable उपयोग करने के लिए नहीं:

public static boolean colorizeToolbarOverflowButton(@NonNull Toolbar toolbar, @ColorInt Integer color) { 
    final Drawable overflowIcon = toolbar.getOverflowIcon(); 
    if (overflowIcon == null) 
     return false; 
    final PorterDuffColorFilter colorFilter = toolbarIconsColor == null ? null : new PorterDuffColorFilter(toolbarIconsColor, PorterDuff.Mode.MULTIPLY); 
    overflowIcon.setColorFilter(colorFilter); 
    return true; 
} 
संबंधित मुद्दे