탐색 창에서 메뉴 항목의 텍스트 색상 변경


89

내 앱에 야간 테마를 추가하려고하는데 내비게이션 서랍의 텍스트와 아이콘을 어두운 배경과 함께 흰색으로 바꾸는 데 거의 3 시간을 낭비했습니다. 여기에 내가이 일을 가야하기 위해 노력하고있어 방법이다 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 솔루션을 찾으려고 시도했지만 이것이 왜 간과되었는지 모르겠 기 때문에 머리를 긁적입니다.

누군가 내가 달성하려는 것을 얻기 위해 동적 솔루션을 제공 할 수 있습니까? 모든 도움에 감사드립니다. 감사합니다!

편집 : 타사 라이브러리를 사용하지 않고 지원 라이브러리에서 제공되는 NavigationView입니다. 다음은 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>

왜 당신은 단지에서 활동 테마를 변경하지 않습니다 LightDark.. 반대 및 부사장
에밀

내 앱이 프로그래밍되는 방식으로 @Boss는 지루한 과정이 될 것입니다. 이 낮 / 밤 테마는 내비게이션 서랍을 제외하고 다른 모든 곳에서 완벽하게 작동하므로 수정 만하면됩니다.
wasimsandhu

답변:


244
 <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
이렇게하면 탐색 창에있는 모든 항목의 색상이 "사용자 색상"으로 설정됩니다. 서랍의 각 그룹에 대해 개별적으로 색상을 변경하는 방법이 있습니까?
Akeshwar Jha

2
@Akeshwar, 프로그래밍 방식으로 시도해 볼 수는 있지만 Material 지침에 위배되므로 권장하지 않습니다.
Abdellah Benhammou

예, 색상을 개별적으로 변경하는 방법도 있습니다!

2
@NehaTyagi xml에서 메뉴 항목의 글꼴 스타일을 변경하는 방법.
Chetan Joshi

@Hara Hara Mahadevaki 말씀해 주시겠습니까?
anju jo

43

NavigationView에서 app : 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:itemTextColor="@color/customColor"
    app:itemIconTint="@color/customColor"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_home"
    app:menu="@menu/activity_home_drawer" />

3
선택한 항목의 텍스트 색상은 무엇입니까?
Usman Rana

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

여기 내가 그 답을 얻은 곳입니다. 그리고 내 NavigationView를 할당 한 직후 :

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

안녕하세요, 탐색 창에있는 모든 그룹의 색상을 개별적으로 변경할 수있는 방법이 있나요?
Akeshwar Jha

여전히 회색 색상

그룹 텍스트 색상을 변경하는 방법은 무엇입니까?
아리

15

추가 옵션 :

"textColorSecondary"를 재정 의하여 그룹 제목을 변경할 수도 있습니다.

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

이 솔루션은 색상 문제를 해결하는 데 도움이되었습니다. 감사합니다!
Mark Delphi 19 년

10

다음 과 같이 NavigationView 에 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

드로어 블을 사용할 수 있습니다.

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

미래에 누군가가 여기에 오면 탐색 창 활동 (활동 프롬프트 창에서 Studio 제공)

정답은 -

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

MainActivity의 onNavigationItemSelected ()에서 이것을 사용합니다 (탐색 서랍 활동을 사용하는 경우이 함수를 작성할 필요가 없으며 MainActivity에 추가됩니다).

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

팁-onNavigationItemSelected ()에서 If else Condition 앞에이 코드를 추가합니다.


2

도움이 될 수 있습니다.

activity_ "navigation activity name".xml로 이동합니다. NavigationView 내부에이 코드 삽입

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

그런 다음 styles.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);

        }

    }

Activity의 onCreate 메서드에서이 작업을 수행했습니다.


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

app : itemBackground를 사용하여 항목 배경을 설정하려면

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.