নেভিগেশন ড্রয়ারে মেনু আইটেমের পাঠ্যের রঙ পরিবর্তন করা


90

আমি আমার অ্যাপ্লিকেশনটির জন্য একটি নাইট থিম যুক্ত করার চেষ্টা করছি এবং আমার নেভিগেশন ড্রয়ারের পাঠ্য এবং আইকনগুলি অন্ধকার পটভূমির সাথে সাদা করে তুলতে কেবল প্রায় তিন ঘন্টা নষ্ট করেছি। এখানে পথ আমি এই কাজ সম্পর্কে যেতে চেষ্টা করছি 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) এ সেট করা থাকলে, নেভিগেশন ড্রয়ারে যা কিছু মেনু আইটেম নির্বাচন করা হয় তা সাদা হয়। তবে, কেবল তখনই ঘটে যখন প্রতিটি আইটেম নির্বাচন করা হয় যা স্পষ্টত অসুবিধাজনক। এখানে আমার ড্রয়ার_ডার্ক.এক্সএমএল:

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

আমি প্রতিটি আইটেমের জন্য স্বচ্ছ পটভূমিতে সাদা আইকন ব্যবহার করছি, তারা নেভিগেশন ড্রয়ারের কালো পটভূমিতে কালো হিসাবে দেখায় as আমি লেখার রঙ পরিবর্তন করার জন্য একটি এক্সএমএল সমাধানের সন্ধান করার চেষ্টা করেছি এবং আমি আমার মাথাটি আঁচড়ানো করছি কারণ কেন জানি এটিকে উপেক্ষা করা হয়নি।

আমি কী অর্জন করতে চাইছে সে সম্পর্কে কেউ কি আমাকে একটি গতিশীল সমাধানের প্রস্তাব দিতে পারেন? সমস্ত সাহায্য প্রশংসা করা হয়, আপনাকে ধন্যবাদ!

সম্পাদনা: আমি তৃতীয় পক্ষের লাইব্রেরিটি ব্যবহার করছি না, এটি সমর্থন লাইব্রেরিতে সরবরাহ করা নেভিগেশনভিউ। এখানে এক্সএমএল লেআউটটি রয়েছে:

<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এবং তদ্বিপরীত ..
এমিল

@ বস যেভাবে আমার অ্যাপ্লিকেশনটিকে প্রোগ্রাম করা হয়েছে, এটি এক ক্লান্তিকর প্রক্রিয়া হবে। আমার এই দিন / রাতের থিমটি অন্য যে কোনও জায়গায় নিখুঁতভাবে কাজ করছে তবে আমার নেভিগেশন ড্রয়ার, সুতরাং আমার যা প্রয়োজন তা হ'ল এটির একটি স্থির।
ওয়াসিমসন্ধু

উত্তর:


248
 <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
এটি নেভিগেশন ড্রয়ারের প্রতিটি আইটেমের রঙ "আপনার রঙ" এ সেট করবে। ড্রয়ারের প্রতিটি গ্রুপের জন্য স্বতন্ত্রভাবে রঙ পরিবর্তন করার কোনও উপায় আছে কি?
আকেশ্বর ঝা

4
@ আকেশ্বর, আপনি সেই অগ্রগতি সম্পন্ন করার চেষ্টা করতে পারেন, তবে, আমি এটি প্রস্তাব করব না যেহেতু এটি বস্তুগত নির্দেশিকাগুলির পরিপন্থী।
আবদুল্লাহ বেনহামউ

হ্যাঁ স্বতন্ত্রভাবেও রঙগুলি পরিবর্তন করার একটি উপায় আছে!

4
@ নেহাটাইয়াগি কীভাবে এক্সএমএল থেকে মেনু আইটেমগুলিতে ফন্ট শৈলী পরিবর্তন করতে পারেন।
চেতন জোশী

@ হারা হারা মহাদেবকী আপনি কি আমাকে বলতে পারেন?
আঞ্জু জো

44

অ্যাপ্লিকেশনটি ব্যবহার করুন: আপনার নেভিগেশনভিউতে আইটেম আইকনটিন্ট, এ:

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

4
এবং নির্বাচিত আইটেম টেক্সট রঙ কি?
উসমান রানা

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

হাই, নেভিগেশন ড্রয়ারের প্রতিটি গ্রুপের স্বতন্ত্রভাবে রঙ পরিবর্তন করার কোনও উপায় আছে কি?
আকেশ্বর ঝা

এখনও এর ধূসর বর্ণের

গ্রুপ পাঠ্যের রঙ কীভাবে পরিবর্তন করবেন?
এরি 16

15

আরও বিকল্প:

আপনি "পাঠ্য রঙ সেকেন্ডারি" ওভাররাইড করে গ্রুপ শিরোনামও পরিবর্তন করতে পারেন

আপনার স্টাইল.এক্সএমএল এ

<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

অ্যাপ্লিকেশন যুক্ত করুন: আইটেমটেক্সটকালার = "# 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

ভবিষ্যতে যদি কেউ এখানে ব্যবহার করে নেভিগেশন ড্রয়ার ক্রিয়াকলাপ (কার্যকলাপ প্রম্পট উইন্ডোতে স্টুডিও দ্বারা সরবরাহিত) হয়

উত্তরটা হচ্ছে -

মেইনএকটিভিটিতে অনক্রিয়েট () এর আগে এটি ব্যবহার করুন

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

এবং এটি মেইনএকটিভিটিতে অন্যাভিগেশন আইটেমসিলিগ্রেটেড () এ ব্যবহার করুন (আপনি নেভিগেশন ড্রয়ার ক্রিয়াকলাপটি ব্যবহার করলে এই ফাংশনটি লেখার দরকার নেই, এটি মেইনএকটিভিটিতে যুক্ত করা হবে)।

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

টিপ - ন্যাভিগেশন আইটেমসিলেক্ট () এ অবস্থিত অন্য কোনও অবস্থার আগে এই কোডটি যুক্ত করুন


4

এটি আমার পক্ষে কাজ করে। কাস্টমপথের জায়গায় আপনি শৈলীতে থিম রাখতে পারেন। এই কোডটিতে আপনি ফন্ট এবং পাঠ্যের আকারও পরিবর্তন করতে পারেন।

    <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

আপনি এখানে আঁকতে ব্যবহার করতে পারেন

অ্যাপ্লিকেশন: আইটেমটেক্সটকালার অ্যাপ: আইটেম আইকনটিন্ট

তারপরে আপনি একটি অঙ্কনযোগ্য ব্যবহার করে চেক করা রাষ্ট্র এবং স্বাভাবিক অবস্থা নিয়ন্ত্রণ করতে পারেন

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

2

এটি আমার পক্ষে কাজ করতে পারে help

ক্রিয়াকলাপটিতে যান "নেভিগেশন ক্রিয়াকলাপের নাম" .xML ভিতরে নেভিগেশনভিউ দেখুন এই কোডটি .োকান

app:itemTextColor="color of your choice"

2

আমার ক্ষেত্রে, আমাকে কেবল একটি মেনু আইটেমের রঙ পরিবর্তন করতে হবে - "লগআউট"। আমাকে পুনরাবৃত্তি চালাতে হয়েছিল এবং শিরোনামের রঙটি পরিবর্তন করতে হয়েছিল:

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

        }

    }

আমি ক্রিয়াকলাপের অনক্রিট পদ্ধতিতে এটি করেছি।


আইডি দিয়ে আইটেমটি কেন খুঁজে পাচ্ছেন না?
আহমেদ আওদাল্লাহ

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

এবং তারপরে আপনার স্টাইলস.এমএমএল ফাইলটিতে:

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

আপনি কাস্টম থিমটিতে আরও বৈশিষ্ট্য প্রয়োগ করতে পারেন।


1

একক আইটেমের স্বতন্ত্র পাঠ্য রঙ পরিবর্তন করতে নীচের মতো একটি স্প্যানিয়েবল স্ট্রিং ব্যবহার করুন:

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

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

আইটেম আইকনটিন্ট, যদি আপনি আইকনের রঙ পরিবর্তন করতে চান

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.