Gezinme çekmecesi öğesi simgesi orijinal rengi göstermiyor


138

Gezinme çekmecem için menümdeki bir öğenin yanında bir simge göstermeye çalışıyorum, ancak bir nedenle simge her zaman orijinal renk (kahverengi) yerine gri renkte görünüyor. Simgenin orijinal rengini göstermek için bunun olmasını önlemenin bir yolu var mı?

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>

resim açıklamasını buraya girin


Senin içinde ne var ic_browncircle?
Ye Lin Aung

@YeLinAung Yukarıdaki 'Alt madde 1'in yanındaki simge gibi kahverengi fakat kahverengi değil, kahverengi bir daire.
MacaronLover

Belki .setColorFilter(MY_BROWN_COLOR)bu görüşü deneyebilirsiniz ?
Ye Lin Aung

Lütfen aşağıdaki cevabımı görün.
Ye Lin Aung

Yanıtlar:


350

Cevabı burada buldum: https://stackoverflow.com/a/30632980/875249

Bağlantının oldukça basit olmasını önlemek için:

    mNavigationView.setItemIconTintList(null);

Bu, tüm eyalet tabanlı renklendirmeyi devre dışı bırakır, ancak kendi listenizi de belirleyebilirsiniz. Çok işime yaradı!

Renk durumu listesi oluşturma ile ilgili ayrıntıları burada bulabilirsiniz, ancak oldukça basit: 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>

Evet, API 17 çalıştıran bir Nexus 4 üzerinde test ettim. Android M önizlemesinde de test ettim. ColorStateList bir süredir var ve NavigationView destek kütüphanesinin bir parçası, bu yüzden bunun neden ICS'ye kadar ve muhtemelen daha da geriye gitmeyeceğinin bir nedenini görmüyorum.
Chris

11
Bunun için XML alternatifi var mı? Denedim app:itemIconTint="@null"ama başarı yok.
Mangesh

Teşekkürler, bu sorunla
başım ağrıyordu

4
mNavigationView.setItemIconTintList(null);Bu çok uzun süredir aradığım cevap ...
Jahid

1
Seçiciyi nerede kullanıyorsunuz?
John Sardinha

49

kullanım

    mNavigationView.setItemIconTintList(null);

bu doğru. Ayrıca tek bir renk düzeninde tüm simgeleri (tüm beyaz vardı) xml dosyası üzerinden ayarlayabilirsiniz - app: itemIconTint = "@ android: renk / beyaz"

Benim olayım:

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


Bu iyi çalışır mNavigationView.setItemIconTintList(null);, varsayılan iconTint'i tüm simgelerden kaldırır. Simgeniz kırmızı renkteyse kırmızı görünür, iconTint uygulanmaz.
Syed Hissaan

5

Uygulamamın birinde benzer bir şey denedim. Ve evet, simge rengi değişmiyor gibi görünüyor. Ama başka bir çözümle başa çıktım. İşte benimic_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>

Sanırım sana benzer bir şey ama hiçbir etkisi yok ve rengini değiştirmiyor.

Yani yaptığım şey bu.

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

Ve işe yarıyor gibi görünüyor. İşte sonuç.

resim açıklamasını buraya girin


Lolipop öncesi ne olacak?
MacaronLover

Lolipop öncesi için birkaç çözüm deniyorum. Şimdiye kadar, henüz şans yok :(
Ye Lin Aung

4

Android StudioSağlanan navigasyon çekmecesi ile bir proje oluşturursanız . , Ana Etkinlik sınıfta, sadece basitçe bu kod satırı ekleyebilirsiniz navigationView.setItemIconTintList(null);sizin için onCreateyöntemle. Bunun gibi;

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

3

Renkli bir çekilebilir kullanmayı deneyebilirsiniz, 5.0'ın altında çalışıp çalışmadığından emin değilsiniz.

Çekilebilir bir dosya oluşturun ve aşağıdaki kodu ekleyin.

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

Ardından çekilebilir menü öğenizi az önce oluşturduğunuz öğeye değiştirin. Bu işe yaramazsa, başka çözümlerden emin değilim. Bu kütüphaneyi deneyebilirsiniz: https://github.com/mikepenz/MaterialDrawer Projelerimde çok kullanıyorum.


Bu yöntem API 17 (4.2) üzerinde çalışmaz. Nedeni (en azından benim deneyimime göre), temanızın ışığa ayarlanması durumunda gezinme çekmecesinin otomatik olarak siyah bir renk tonu ile beyaz bir simgenin üzerine yerleşmesidir. Işığı temamdan kaldırdığımda simgelerim olmasını istediğim gibi beyaza dönüyor.
Chris

1

Sadece xml içine bir satır ekleyin

app:itemIconTint="@color/white"


Veyaapp:itemIconTint="@null"
Vlad

1

Bu kod MainActivity.java nasıl çalışıyor

                NavigationView.setItemIconTintList(null); // not working

böylece kullanabilirsiniz.

MainActivity.java

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.