탐색 창 항목 아이콘이 원래 색상으로 표시되지 않음


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?
Ye Lin Aung

@YeLinAung 'Sub item 1'옆의 위 아이콘과 같지만 회색이 아닌 갈색의 갈색 원.
MacaronLover

어쩌면 당신은 .setColorFilter(MY_BROWN_COLOR)그 견해를 시도 할 수 있습니까?
Ye Lin Aung

아래 답변을 참조하십시오.
Ye Lin Aung

답변:


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>

예, API 17을 실행하는 Nexus 4에서 테스트했습니다. 또한 Android M 미리보기에서도 테스트했습니다. ColorStateList는 오랫동안 사용되어 왔으며 NavigationView는 지원 라이브러리의 일부이므로 이것이 ICS 에까지 작동하지 않거나 더 이상 작동하지 않는 이유를 알 수 없습니다.
Chris

11
이것에 대한 XML 대안? 시도 app:itemIconTint="@null"했지만 성공하지 못했습니다.
Mangesh 2013

감사합니다.이 문제로 두통을
겪기

4
mNavigationView.setItemIconTintList(null);이것은 내가 오랫동안 찾고 있던 해답입니다 ...
Jahid

1
선택기를 어디에서 사용합니까?
John Sardinha 2016 년

49

사용하다

    mNavigationView.setItemIconTintList(null);

맞습니다. 또한 하나의 색 구성표 (모든 흰색이 있음)의 모든 아이콘을 XML 파일을 통해 설정할 수 있습니다-app : 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"
    />


이것은 잘 작동 mNavigationView.setItemIconTintList(null);하며 모든 아이콘에서 기본 iconTint를 제거합니다. 아이콘이 빨간색으로 표시되면 아이콘이 빨간색으로 표시되고 iconTint가 적용되지 않습니다.
Syed Hissaan

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

롤리팝 이전에 몇 가지 솔루션을 시도했습니다. 지금까지 아직 운이 없다 :(
Ye Lin Aung

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 내 프로젝트에서 많이 사용합니다.


이 방법은 API 17 (4.2)에서 작동하지 않습니다. 그 이유는 (적어도 내 경험상) 테마를 조명으로 설정하면 탐색 창에 검은 색조가있는 흰색 아이콘이 자동으로 오버레이되기 때문입니다. 테마에서 조명을 제거하면 원하는대로 아이콘이 흰색으로 돌아갑니다.
Chris

1

xml에 한 줄만 추가하십시오.

app:itemIconTint="@color/white"


또는app:itemIconTint="@null"
Vlad

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

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