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




xml menu (11)

मैं अपने ऐप के लिए एक रात का विषय जोड़ने की कोशिश कर रहा हूं और मैंने लगभग तीन घंटे बर्बाद कर दिए हैं, बस अपने नेविगेशन ड्रॉअर में सफेद पृष्ठभूमि के साथ पाठ और आइकन बनाने की कोशिश कर रहा हूं। इस तरह से मैं इसे MainActivity.java 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>

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

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

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

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

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

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

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

app: itemTextColor ऐप: itemIconTint

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

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

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> 

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

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

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

उत्तर है -

MainCctivity में 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 ()


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

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

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

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

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

NavigationView setItemTextColor() में एक विधि है, जिसे 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);

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

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

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

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

drawer_item_bg.xml

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




menu