नेविगेशन दराज में मेनू आइटम का टेक्स्ट रंग बदलना


89

मैं अपने ऐप के लिए एक रात का विषय जोड़ने की कोशिश कर रहा हूं और मैंने लगभग तीन घंटे बर्बाद कर दिए हैं और अपने नेविगेशन ड्रॉअर में काले पृष्ठभूमि के साथ पाठ और आइकन बनाने की कोशिश कर रहा हूं। यहाँ जिस तरह से मैं में यह कर के बारे में जाने के लिए कोशिश कर रहा हूँ है onCreate()में MainActivity.java:

navigationView = (NavigationView) findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

    // This method will trigger onItemClick of navigation menu
    @Override
    public boolean onNavigationItemSelected(MenuItem menuItem) {

        // Checking if the item is in checked state or not, if not make it in checked state
        if (menuItem.isChecked())
            menuItem.setChecked(false);
        else menuItem.setChecked(true);

        if (nightMode == 0) {
            SpannableString spanString = new SpannableString(menuItem.getTitle().toString());
            spanString.setSpan(new ForegroundColorSpan(Color.WHITE), 0, spanString.length(), 0); // fix the color to white
            menuItem.setTitle(spanString);
        }

nightModeक्योंकि यह काम करता है बूलियन अप्रासंगिक है। जब रात मोड को (0) पर सेट किया जाता है, तो नेविगेशन ड्रावर में जो भी मेनू आइटम चुना जाता है वह सफेद हो जाता है। हालांकि, यह केवल तब होता है जब प्रत्येक आइटम का चयन किया जाता है जो स्पष्ट रूप से असुविधाजनक है। यहाँ मेरा drawer_dark.xml है:

    <?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group
        android:checkableBehavior="single">
        <item
            android:id="@+id/unitone"
            android:checked="true"
            android:icon="@drawable/one_white"
            android:title="Classical Period" />
        <item
            android:id="@+id/unittwo"
            android:checked="false"
            android:icon="@drawable/two_white"
            android:title="Postclassical Period" />
        <item
            android:id="@+id/unitthree"
            android:checked="false"
            android:icon="@drawable/three_white"
            android:title="Early Modern Era" />
        <item
            android:id="@+id/unitfour"
            android:checked="false"
            android:icon="@drawable/four_white"
            android:title="Dawn of Industrial Age" />
        <item
            android:id="@+id/unitfive"
            android:checked="false"
            android:icon="@drawable/five_white"
            android:title="Modern Era" />
    </group>
</menu>

मैं प्रत्येक आइटम के लिए पारदर्शी पृष्ठभूमि पर सफेद आइकन का उपयोग कर रहा हूं, फिर भी वे नेविगेशन ड्रॉअर की काली पृष्ठभूमि पर काले दिखाई देते हैं। मैंने पाठ के रंग को बदलने के लिए एक xml समाधान की तलाश की है और मैं अपना सिर खुजला रहा हूं क्योंकि मुझे नहीं पता कि यह अनदेखी क्यों की गई थी।

क्या कोई मुझे प्राप्त करने में एक गतिशील समाधान प्रदान कर सकता है जिसे मैं प्राप्त करने की कोशिश कर रहा हूं? सभी मदद की सराहना की है, धन्यवाद!

संपादित करें: मैं किसी तीसरे पक्ष के पुस्तकालय का उपयोग नहीं कर रहा हूं, यह सहायता पुस्तकालय में उपलब्ध नेविगेशन व्यू है। यहाँ XML लेआउट है:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:elevation="7dp"
    tools:context=".MainActivity"
    android:fitsSystemWindows="true" >

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/ColorDark" />

        <include layout="@layout/toolbar" />

    </FrameLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:background="#000"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/header"
        app:menu="@menu/drawer" />

</android.support.v4.widget.DrawerLayout>

क्यों तुम सिर्फ गतिविधि विषय से परिवर्तित नहीं करते Lightकरने के लिए Darkऔर इसके विपरीत ..
एमिल

@ जिस तरह से मेरे ऐप को प्रोग्राम किया गया है, यह एक थकाऊ प्रक्रिया होगी। मेरे पास इस दिन / रात का विषय पूरी तरह से हर जगह काम कर रहा है लेकिन मेरा नेविगेशन दराज है, इसलिए मुझे इसके लिए एक निश्चित आवश्यकता है।
थीमसंधु

जवाबों:


245
 <android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:background="#000"
        android:layout_height="match_parent"
        android:layout_width="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/header"
        app:itemTextColor="your color"
        app:menu="@menu/drawer" />

29
यह नेविगेशन ड्रॉअर के हर आइटम का रंग "आपके रंग" पर सेट करेगा। क्या दराज के प्रत्येक समूह के लिए व्यक्तिगत रूप से रंग बदलने का एक तरीका है?
अखेश्वर झा

2
@ अकेश्वर, आप इसे प्रोग्रामेटिक रूप से करने की कोशिश कर सकते हैं, हालाँकि, मैं यह अनुशंसा नहीं करूंगा कि चूंकि यह सामग्री दिशानिर्देशों के विरुद्ध है।
अब्देलाह बेनहमौ

हाँ, व्यक्तिगत रूप से भी रंग बदलने का एक तरीका है!

2
@NehaTyagi xml से मेनू आइटम में फ़ॉन्ट शैली कैसे बदलें।
चेतन जोशी

@ हारा हारा महादेवी क्या आप कृपया मुझे बता सकते हैं?
अंजू जो

44

एप्लिकेशन का उपयोग करें: अपने नेविगेशन दृश्य में आइटम टाइप करें, ej:

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:itemTextColor="@color/customColor"
    app:itemIconTint="@color/customColor"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_home"
    app:menu="@menu/activity_home_drawer" />

3
और कौन से मुक्केबाज़ी ने आइटम टेक्स्ट का रंग चुना है?
उस्मान राणा

28

NavigationViewनामक एक विधि है setItemTextColor()। यह एक का उपयोग करता है ColorStateList

// FOR NAVIGATION VIEW ITEM TEXT COLOR
int[][] state = new int[][] {
        new int[] {-android.R.attr.state_enabled}, // disabled
        new int[] {android.R.attr.state_enabled}, // enabled
        new int[] {-android.R.attr.state_checked}, // unchecked
        new int[] { android.R.attr.state_pressed}  // pressed

};

int[] color = new int[] {
        Color.WHITE,
        Color.WHITE,
        Color.WHITE,
        Color.WHITE
};

ColorStateList csl = new ColorStateList(state, color);


// FOR NAVIGATION VIEW ITEM ICON COLOR
int[][] states = new int[][] {
        new int[] {-android.R.attr.state_enabled}, // disabled
        new int[] {android.R.attr.state_enabled}, // enabled
        new int[] {-android.R.attr.state_checked}, // unchecked
        new int[] { android.R.attr.state_pressed}  // pressed

};

int[] colors = new int[] {
        Color.WHITE,
        Color.WHITE,
        Color.WHITE,
        Color.WHITE
};

ColorStateList csl2 = new ColorStateList(states, colors);

यहाँ मुझे वह उत्तर मिला है। और फिर मेरा नेविगेशन दृश्य असाइन करने के ठीक बाद:

if (nightMode == 0) {
            navigationView.setItemTextColor(csl);
            navigationView.setItemIconTintList(csl2);
        }

नमस्ते, क्या नेविगेशन दराज के प्रत्येक समूह के रंग को व्यक्तिगत रूप से बदलने का कोई तरीका है?
अकेश्वर झा

अभी भी इसका रंग ग्रे है

समूह पाठ रंग कैसे बदलें?
अरी

15

अधिक विकल्प:

आप "textColorSecondary" को ओवरराइड करके समूह का शीर्षक भी बदल सकते हैं

अपनी शैलियों में। Xml

<style name="AppTheme.NavigationView">
    <item name="android:textColorSecondary">#FFFFFF</item>
</style>

अपने लेआउट में

<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:fitsSystemWindows="true"
    app:menu="@menu/activity_main_menu_drawer_drawer"
    android:theme="@style/AppTheme.NavigationView"
    app:itemIconTint="@color/colorPrimary"
    app:itemTextColor="@color/white"/>

इस समाधान ने मुझे अपनी रंग समस्या को ठीक करने में मदद की। धन्यवाद!
मार्क डेल्फी

10

add app: itemTextColor = "# fff" जैसे अपने नेवीगेशन व्यू में

 <android.support.design.widget.NavigationView
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    app:menu="@menu/slider_menu"
    android:background="@color/colorAccent"
    app:itemTextColor="#fff"
    android:id="@+id/navigation_view"
    android:layout_gravity="start"/>

6

मैंने अपने ऐप में नेविगेशन दराज पाठ का रंग बदलने के लिए कोड का उपयोग किया है।

NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setItemTextColor(ColorStateList.valueOf(Color.WHITE));

4

यह मेरे लिए काम करता है। customTheme के स्थान पर आप शैलियों में विषय रख सकते हैं। इस कोड में आप फ़ॉन्ट और टेक्स्ट का आकार भी बदल सकते हैं।

    <style name="MyTheme.NavMenu" parent="CustomTheme">
            <item name="android:textSize">16sp</item>
            <item name="android:fontFamily">@font/ssp_semi_bold</item>
            <item name="android:textColorPrimary">@color/yourcolor</item>
        </style>

यहाँ मेरा नेविगेशन दृश्य है

<android.support.design.widget.NavigationView
        android:id="@+id/navigation_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:theme="@style/MyTheme.NavMenu"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer">

        <include layout="@layout/layout_update_available"/>

    </android.support.design.widget.NavigationView>

4

आप बस अपने नेविगेशन व्यू में अपनी थीम जोड़कर कर सकते हैं।

    <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:fitsSystemWindows="true"
    android:background="@color/colorPrimary"
    android:theme="@style/AppTheme.NavigationView"
    app:headerLayout="@layout/nav_header_drawer"
    app:menu="@menu/activity_drawer_drawer"/>

और अपने style.xml फ़ाइल में, आप इस विषय को जोड़ देंगे

   <style name="AppTheme.NavigationView" >
    <item name="colorPrimary">@color/text_color_changed_onClick</item>
    <item name="android:textColorPrimary">@color/Your_default_text_color</item>
</style>

4

आप ड्रॉबल्स का उपयोग कर सकते हैं

ऐप: itemTextColor ऐप: itemIconTint

फिर आप एक ड्रॉबल का उपयोग करके जाँच की गई स्थिति और सामान्य स्थिति को नियंत्रित कर सकते हैं

<android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:itemHorizontalPadding="@dimen/margin_30"
            app:itemIconTint="@drawable/drawer_item_color"
            app:itemTextColor="@drawable/drawer_item_color"
            android:theme="@style/NavigationView"
            app:headerLayout="@layout/nav_header"
            app:menu="@menu/drawer_menu">

drawer_item_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/selectedColor" android:state_checked="true" />
    <item android:color="@color/normalColor" />
</selector>

3

जावा वर्ग में यह कोशिश करो

yourNavigationView.setItemTextColor(new ColorStateList(
            new int [] [] {
                    new int [] {android.R.attr.state_pressed},
                    new int [] {android.R.attr.state_focused},
                    new int [] {}
            },
            new int [] {
                    Color.rgb (255, 128, 192),
                    Color.rgb (100, 200, 192),
                    Color.WHITE
            }
    ));

3

भविष्य में अगर कोई भी यहां उपयोग करता है, तो नेविगेशन ड्रावर गतिविधि (स्टूडियो द्वारा दी गई गतिविधि प्रॉम्प्ट विंडो में)

उत्तर है -

MainActivity में OnCreate () से पहले इसका इस्तेमाल करें

int[][] state = new int[][] {
        new int[] {android.R.attr.state_checked}, // checked
        new int[] {-android.R.attr.state_checked}
};

int[] color = new int[] {
        Color.rgb(255,46,84),
        (Color.BLACK)
};

ColorStateList csl = new ColorStateList(state, color);

int[][] state2 = new int[][] {
        new int[] {android.R.attr.state_checked}, // checked
        new int[] {-android.R.attr.state_checked}
};

int[] color2 = new int[] {
        Color.rgb(255,46,84),
        (Color.GRAY)
};

ColorStateList csl2 = new ColorStateList(state2, color2);

और इस का उपयोग onNavigationItemSelected () में MainActivity (आपको इस फ़ंक्शन को लिखने की आवश्यकता नहीं है यदि आप नेविगेशन दराज गतिविधि का उपयोग करते हैं, तो इसे MainActivity में जोड़ दिया जाएगा)।

 NavigationView nav = (NavigationView) findViewById(R.id.nav_view);
    nav.setItemTextColor(csl);
    nav.setItemIconTintList(csl2);
    nav.setItemBackgroundResource(R.color.white);

टिप - इस कोड को इससे पहले कि अन्य शर्त पर जोड़ें OnNavigationItemSelected ()


2

यह मेरे लिए काम करने में मदद कर सकता है

Activity_ "नेविगेशन गतिविधि नाम" पर जाएं .xml इनसाइड नेविगेशन व्यू इस कोड को डालें

app:itemTextColor="color of your choice"

1

आप एक कस्टम थीम को भी परिभाषित कर सकते हैं जो आपके बेस थीम से ली गई है:

<android.support.design.widget.NavigationView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:id="@+id/nav_view"
        app:headerLayout="@layout/nav_view_header"
        app:menu="@layout/nav_view_menu"
        app:theme="@style/MyTheme.NavMenu" />

और फिर अपनी शैलियों में। xml फ़ाइल:

  <style name="MyTheme.NavMenu" parent="MyTheme.Base">
    <item name="android:textColorPrimary">@color/yourcolor</item>
  </style>

आप कस्टम थीम पर अधिक विशेषताएँ भी लागू कर सकते हैं।


1

किसी एकल आइटम के अलग-अलग टेक्स्ट कलर को बदलने के लिए, नीचे दिए गए SpannableString का उपयोग करें:

SpannableString spannableString = new SpannableString("Menu item"));
        spannableString.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.colorPrimary)), 0, spannableString.length(), 0);

menu.findItem(R.id.nav_item).setTitle(spannableString);

1

मेरे मामले में, मुझे सिर्फ एक मेनू आइटम का रंग बदलने की आवश्यकता थी - "लॉगआउट"। मुझे एक पुनरावर्तन चलाना था और शीर्षक का रंग बदलना था:

NavigationView nvDrawer;
Menu menu = nvDrawer.getMenu();
    for (int i = 0; i < menu.size(); i ++){
        MenuItem menuItem = menu.getItem(i);

        if (menuItem.getTitle().equals("Logout")){

            SpannableString spanString = new SpannableString(menuItem.getTitle().toString());
            spanString.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.red)), 0, spanString.length(), 0);
            menuItem.setTitle(spanString);

        }

    }

मैंने एक्टिविटी ऑनक्रिएट विधि में ऐसा किया।


0
 <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:fitsSystemWindows="true"
        app:itemBackground="@drawable/drawer_item_bg"
        app:headerLayout="@layout/nav_header_home"
        app:menu="@menu/app_home_drawer" />

ऐप का उपयोग करके आइटम पृष्ठभूमि सेट करने के लिए: आइटम बैकग्राउंड

drawer_item_bg.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>
    <item android:top="-2dp" android:right="-2dp" android:left="-2dp">
        <shape>
            <padding android:bottom="0dp" android:left="15dp" android:right="0dp" android:top="0dp"/>
            <solid android:color="@android:color/transparent" />
            <stroke
                android:width="0.5dp"
                android:color="#CACACA" />
        </shape>
    </item>
</layer-list>

0

itemIconTint, अगर आप आइकन का रंग बदलना चाहते हैं

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:fitsSystemWindows="true"
            app:itemTextColor="@color/colorPrimary"
            app:itemIconTint="@color/colorPrimary"
            app:headerLayout="@layout/nav_header_main"
            app:menu="@menu/activity_main_drawer" />

0

नेविगेशन ड्रावर का टेक्स्ट रंग बदलने के लिए

हम प्रयोग करते हैं app:itemTextColor="@color/white"

नेविगेशन दराज के अनिश्चित रंग बदलने के लिए

उपयोग app:itemIconTint="@color/black"


    <com.google.android.material.navigation.NavigationView
        android:id="@+id/naView"
        app:itemIconTint="@color/black"
        android:layout_width="match_parent"
        app:menu="@menu/navmenu"
        app:itemTextColor="@color/white"
        app:headerLayout="@layout/nav_header"
        android:layout_height="match_parent"
        app:itemTextAppearance="?android:textAppearanceMedium"
        android:fitsSystemWindows="true"
        android:layout_gravity="start"
        />

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