Піктограма елемента шухляди навігації не відображає початкового кольору


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 Коричневе коло так само, як іконка вгорі біля "Підпункт 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>

Так, я тестував його на Nexus 4, що працює на API 17. Я також тестував на попередньому попередньому перегляді Android M. ColorStateList вже деякий час існує, і NavigationView є частиною бібліотеки підтримки, тому я не бачу причини, чому це не працюватиме аж до ICS і, можливо, навіть далі.
Кріс

11
Якась альтернатива XML для цього? Спробував, app:itemIconTint="@null"але успіху не було.
Мангеш

Дякую, я почав
боліти

4
mNavigationView.setItemIconTintList(null);Цю відповідь я так довго шукав ...
Джахід

1
Де ви використовуєте селектор?
Джон Сардінья

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

Чи знаєте ви, як вирішити цю іншу проблему?
MacaronLover

Цей працює добре, mNavigationView.setItemIconTintList(null);видаляє за замовчуванням iconTint з усіх піктограм. Тепер якщо у вас значок у червоному кольорі, він виглядатиме червоним, жодна iconTint не застосовуватиметься.
Сиед Гісаан

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

Я пробував кілька рішень для попереднього Lollipop. Поки що, поки не пощастило :(
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). Причина (принаймні, як на моєму досвіді) полягає в тому, що навігаційний ящик автоматично накладає білий значок із чорним відтінком, коли ваша тема вмикається. Коли я знімаю світло з теми, мої піктограми повертаються до білого кольору, як я їх задумав.
Кріс


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.