Ikon item laci navigasi tidak menunjukkan warna asli

138

Saya mencoba untuk menunjukkan ikon di sebelah item dalam menu saya untuk laci navigasi saya, tetapi untuk beberapa alasan ikon selalu muncul dalam warna abu-abu daripada warna aslinya (coklat). Apakah ada cara untuk mencegah hal ini terjadi untuk menunjukkan warna asli ikon?

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>

masukkan deskripsi gambar di sini

MacaronLover
sumber
Apa yang ada di Anda ic_browncircle?
Ye Lin Aung
@YeLinAung Lingkaran coklat persis seperti ikon di atas di sebelah 'Sub item 1' tetapi dalam warna coklat, bukan abu-abu.
MacaronLover
Mungkin Anda bisa mencoba .setColorFilter(MY_BROWN_COLOR)pandangan itu?
Ye Lin Aung
Silakan lihat jawaban saya di bawah ini.
Ye Lin Aung

Jawaban:

350

Saya menemukan jawabannya di sini: https://stackoverflow.com/a/30632980/875249

Untuk menghindari tautannya cukup mudah:

    mNavigationView.setItemIconTintList(null);

Ini menonaktifkan semua pewarnaan berbasis negara, tetapi Anda juga dapat menentukan daftar Anda sendiri juga. Ini bekerja sangat baik untuk saya!

Di sinilah Anda bisa mendapatkan detail tentang cara membuat daftar status warna, tetapi cukup sederhana juga: 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>
Chris
sumber
Ya, saya mengujinya pada Nexus 4 yang menjalankan API 17. Saya juga menguji pada pratinjau Android M. ColorStateList telah ada selama beberapa waktu dan NavigationView adalah bagian dari pustaka dukungan jadi saya tidak melihat alasan mengapa ini tidak akan berhasil sampai ke ICS dan bahkan mungkin lebih jauh ke belakang.
Chris
11
Adakah alternatif XML untuk ini? Sudah mencoba app:itemIconTint="@null"tetapi tidak berhasil.
Mangesh
Terima kasih, saya mulai sakit kepala karena masalah ini
wax911
4
mNavigationView.setItemIconTintList(null);Ini adalah jawaban yang saya cari begitu lama ...
Jahid
1
Di mana Anda menggunakan pemilih?
John Sardinha
49

Menggunakan

    mNavigationView.setItemIconTintList(null);

itu benar. Juga Jika semua ikon Anda dalam satu skema warna (saya punya semua putih), Anda dapat mengatur melalui file xml - app: itemIconTint = "@ android: color / white"

Kasus saya:

<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"
    />
Membuang
sumber
Apakah Anda tahu cara mengatasi masalah lain ini?
MacaronLover
Ini berfungsi dengan baik, mNavigationView.setItemIconTintList(null);menghapus ikonTint default dari semua ikon. Sekarang jika Anda memiliki ikon Anda dalam warna merah, itu akan tampak merah, tidak ada iconTint yang diterapkan.
Syed Hissaan
5

Saya sudah mencoba yang serupa di salah satu aplikasi saya. Dan ya, tampaknya warna ikon tidak berubah. Tapi saya sudah berhasil melakukannya dengan solusi lain. Ini milik sayaic_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>

Yang saya percaya adalah sesuatu yang mirip dengan Anda tetapi tidak memiliki efek apa pun dan tidak mengubah warna.

Jadi yang saya lakukan adalah ini.

navigationView.getMenu()
    .findItem(R.id. navigation_item_1)
    .getIcon()
    .setColorFilter(Color.parseColor("#b69260"), PorterDuff.Mode.SRC_ATOP);

Dan sepertinya berhasil. Inilah hasilnya.

masukkan deskripsi gambar di sini

Ye Lin Aung
sumber
Bagaimana dengan pra-Lollipop?
MacaronLover
Saya sudah mencoba beberapa solusi untuk pre-Lollipop. Sejauh ini, belum beruntung :(
Ye Lin Aung
4

Jika Anda membuat proyek dengan laci navigasi yang Android Studiodisediakan. Di kelas Aktivitas Utama Anda, Anda cukup menambahkan baris kode ini navigationView.setItemIconTintList(null);ke onCreatemetode Anda . Seperti ini;

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
 navigationView.setNavigationItemSelectedListener(this);
 navigationView.setItemIconTintList(null); // <----- HERE
 setupDrawerContent(navigationView);
David Adam
sumber
3

Anda dapat mencoba menggunakan drawed tinted, tidak yakin apakah itu bekerja di bawah 5.0.

Buat drawable dan tambahkan kode berikut.

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

Dan kemudian ubah item menu Anda menjadi yang baru saja Anda buat. Jika itu tidak berhasil, maka saya tidak yakin ada solusi lain. Anda dapat mencoba perpustakaan ini: https://github.com/mikepenz/MaterialDrawer Saya sering menggunakannya di proyek saya.

Austin Hodak
sumber
Metode ini tidak berfungsi pada API 17 (4.2). Alasannya (setidaknya dalam pengalaman saya), adalah laci navigasi secara otomatis menutupi ikon putih dengan warna hitam ketika tema Anda diatur ke cahaya. Ketika saya menghapus cahaya dari tema saya, ikon saya kembali menjadi putih seperti yang saya inginkan.
Chris
1

Cukup tambahkan satu baris dalam xml

app:itemIconTint="@color/white"

Harsh Singhal
sumber
Atauapp:itemIconTint="@null"
Vlad
1

Entah bagaimana kode ini tidak berfungsi MainActivity.java

                NavigationView.setItemIconTintList(null); // not working

jadi kamu bisa menggunakannya.

MainActivity.java

 NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
   navigationView.setNavigationItemSelectedListener(this); 
   navigationView.setItemIconTintList(null); // <-- HERE add this code for icon color
Parban
sumber
0

Tambahkan ini

 android:tint="@color/colorPrimary"
Pengecualian Null Pointer
sumber