नेविगेशन दराज आइटम आइकन मूल रंग नहीं दिखा रहा है


138

मैं अपने नेविगेशन ड्रॉअर के लिए अपने मेनू के भीतर एक आइटम के बगल में एक आइकन दिखाने की कोशिश कर रहा हूं, लेकिन किसी कारण से आइकन हमेशा मूल रंग (भूरा) के बजाय ग्रे में दिखाई देता है। क्या आइकन के मूल रंग को दिखाने के लिए इसे रोकने का कोई तरीका है?

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private DrawerLayout mDrawerLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        if (navigationView != null) {
            setupDrawerContent(navigationView);
        }
    }

    private void setupDrawerContent(NavigationView navigationView) {
        navigationView.setNavigationItemSelectedListener(
                new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                mDrawerLayout.closeDrawers();

                return true;
            }
        });
    }
}

drawer_view.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:title="Section">
        <menu>
            <item
                android:id="@+id/navigation_item_1"
                android:icon="@drawable/ic_browncircle"
                android:title="Sub item 1" />
        </menu>
    </item>
</menu>

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


तुम्हारे में क्या है ic_browncircle?
ये लिन आंग

@YeLinAung 'सब आइटम 1' के बगल में ऊपर दिए गए आइकन की तरह ही एक भूरे रंग का चक्र लेकिन रंग भूरा में, ग्रे नहीं।
मैकरलओवर

शायद आप .setColorFilter(MY_BROWN_COLOR)उस दृश्य को आजमा सकते हैं?
ये लिन आंग

कृपया मेरा जवाब नीचे देखें।
ये लिन आंग

जवाबों:


350

मुझे यहाँ उत्तर मिला: https://stackoverflow.com/a/30632980/875249

लिंक से बचने के लिए इसके बहुत सीधे:

    mNavigationView.setItemIconTintList(null);

यह सभी राज्य आधारित टिनिंग को निष्क्रिय करता है, लेकिन आप अपनी सूची भी निर्दिष्ट कर सकते हैं। वो मेरे लिए बहुत अच्छा था!

यहाँ आप रंग राज्य सूची बनाने के बारे में विवरण प्राप्त कर सकते हैं, लेकिन इसके बहुत सरल भी: http://developer.android.com/reference/android/content/res/ColorStateList.html

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="true" android:color="@color/primary" />
        <item android:state_checked="false" android:color="@android:color/white" />
    </selector>

हाँ, मैंने इसे एक नेक्सस 4 पर एपीआई 17 चलाने पर परीक्षण किया था। मैंने एंड्रॉइड एम पूर्वावलोकन पर भी परीक्षण किया। ColorStateList कुछ समय के लिए आसपास रहा है और NavigationView समर्थन लाइब्रेरी का हिस्सा है, इसलिए मुझे एक कारण नहीं दिखता है कि यह ICS के लिए सभी तरह से काम नहीं करेगा और संभवत: आगे भी।
क्रिस

11
इसके लिए कोई XML विकल्प? कोशिश की app:itemIconTint="@null"लेकिन कोई सफलता नहीं मिली।
मंगेश

धन्यवाद, मैं इस मुद्दे के साथ सिरदर्द शुरू कर रहा था
मोम 911

4
mNavigationView.setItemIconTintList(null);यह वह उत्तर है जो मैं बहुत समय से देख रहा था ...
जाहिद

1
आप चयनकर्ता का उपयोग कहां करते हैं?
जॉन सरदिन्हा

49

उपयोग

    mNavigationView.setItemIconTintList(null);

यह सही है। इसके अलावा, अगर आपके सभी आइकन एक रंग योजना में (मेरे पास सभी सफेद थे) तो आप xml फ़ाइल के माध्यम से सेटअप कर सकते हैं - ऐप: itemIconTint = "@ android: color / white"

मेरा मामला:

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:clickable="true"
    app:headerLayout="@layout/nav_header_main"
    app:itemTextColor="@android:color/white"
    app:menu="@menu/activity_main_drawer"
    android:background="@android:color/black"
    app:itemIconTint="@android:color/white"
    />

क्या आप जानते हैं कि इस अन्य समस्या
MacaronLover

यह एक अच्छी तरह से काम करता है, mNavigationView.setItemIconTintList(null);सभी आइकन से डिफ़ॉल्ट आइकन को हटा देता है। अब यदि आपके पास लाल रंग में अपना आइकन है, तो यह लाल दिखाई देगा, कोई आइकन नहीं लगाया जाएगा।
सैयद हिसान

5

मैंने अपने एक ऐप में ऐसा ही कुछ करने की कोशिश की है। और हां, ऐसा प्रतीत होता है कि आइकन का रंग नहीं बदलता है। लेकिन मैं एक और समाधान के साथ करने में कामयाब रहा। ये रहा मेराic_browncircle.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval"
    android:tint="@color/brown"
    >
  <size
      android:height="3dp"
      android:width="3dp"
      />
  <solid android:color="@color/brown"/>
</shape>

मेरा मानना ​​है कि यह आपके लिए कुछ समान है लेकिन इसका कोई प्रभाव नहीं है और यह रंग नहीं बदलता है।

तो मैंने जो किया वह यही है।

navigationView.getMenu()
    .findItem(R.id. navigation_item_1)
    .getIcon()
    .setColorFilter(Color.parseColor("#b69260"), PorterDuff.Mode.SRC_ATOP);

और काम करने लगता है। यहाँ परिणाम है।

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


प्री-लॉलीपॉप के बारे में क्या?
MacaronLover

मैं प्री-लॉलीपॉप के लिए कई समाधान की कोशिश कर रहा हूं। अब तक, कोई भाग्य अभी तक :(
लिन लिन आंग

4

यदि आप नेविगेशन ड्रावर के साथ एक प्रोजेक्ट बनाते हैं जो Android Studioप्रदान किया गया है। अपने मुख्य गतिविधि वर्ग में, आप बस navigationView.setItemIconTintList(null);अपनी onCreateपद्धति में कोड की इस पंक्ति को जोड़ सकते हैं । ऐशे ही;

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
 navigationView.setNavigationItemSelectedListener(this);
 navigationView.setItemIconTintList(null); // <----- HERE
 setupDrawerContent(navigationView);

3

यदि आप 5.0 से नीचे काम करते हैं, तो सुनिश्चित नहीं है कि आप टिंटेड ड्रॉबल का उपयोग कर सकते हैं।

एक ड्रा करने योग्य बनाएं और निम्नलिखित कोड जोड़ें।

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

और फिर अपने मेनू आइटम को केवल आपके द्वारा बनाए गए खाने के लिए बदल दें। अगर वह काम नहीं करता है, तो मैं किसी भी अन्य समाधान के बारे में सुनिश्चित नहीं हूं। आप इस लाइब्रेरी को आज़मा सकते हैं: https://github.com/mikepenz/MaterialDrawer मैं अपनी परियोजनाओं में इसका बहुत उपयोग करता हूं।


यह विधि एपीआई 17 (4.2) पर काम नहीं करती है। कारण (कम से कम मेरे अनुभव में), यह है कि जब आप अपने थीम को प्रकाश में सेट करते हैं, तो नेविगेशन ड्रॉयर एक ब्लैक टिंट के साथ एक सफेद आइकन को स्वचालित रूप से ओवरलैप करता है। जब मैं अपने विषय से प्रकाश हटाता हूं, तो मेरे आइकन सफ़ेद हो जाते हैं जैसे मैंने उन्हें बनाने का इरादा किया था।
क्रिस


1

कुछ कैसे यह कोड MainActivity.java काम नहीं कर रहा है

                NavigationView.setItemIconTintList(null); // not working

तो आप इसका उपयोग कर सकते हैं।

MainActivity.java

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
   navigationView.setNavigationItemSelectedListener(this); 
   navigationView.setItemIconTintList(null); // <-- HERE add this code for icon color

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