2015-07-13 6 views
89

Я пытаюсь показать значок рядом с элементом в моем меню для своего навигационного ящика, но по какой-то причине значок всегда отображается серым цветом, а не исходным (коричневый). Есть ли способ предотвратить это, чтобы показать исходный цвет значка?Значок значка на панели навигации, не показывающий оригинальный цвет

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> 

enter image description here

+0

Что в вашем 'ic_browncircle'? –

+0

@YeLinAung Коричневый круг точно так же, как иконка выше рядом с «Подпункт 1», но в цвете коричневый, а не серый. – MacaronLover

+0

Возможно, вы можете попробовать '.setColorFilter (MY_BROWN_COLOR)' для этого вида? –

ответ

220

Я нашел ответ здесь: 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> 
+0

Работает ли он на pre-Lollipop? – MacaronLover

+0

Да, я тестировал его на API-интерфейсе Nexus 4. Я также тестировал его на предварительном просмотре Android M. ColorStateList существует некоторое время, а NavigationView - часть библиотеки поддержки, поэтому я не вижу причины, почему это не будет работать полностью на ICS и, возможно, даже дальше назад. – Chris

+8

Любая альтернатива XML для этого? Tried 'app: itemIconTint =" @ null "', но нет успех – Mangesh

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 Я использую это много в своих проектах.

+0

Этот метод не работает в API 17 (4.2). Причина (по крайней мере, по моему опыту) заключается в том, что навигационный ящик автоматически накладывает белый значок с черным оттенком, когда у вас установлена ​​тема. Когда я удаляю свет из моей темы, мои значки возвращаются к белым, как я их предполагал. – Chris

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

И кажется, что это работает. Вот результат.

enter image description here

+0

А как насчет pre-Lollipop? – MacaronLover

+0

Я пробовал несколько решений для pre-Lollipop. Пока нет удачи :( –

26

Использование

mNavigationView.setItemIconTintList(null); 

это правильно.Кроме того, если все ваши значки в одной цветовой гамме (я имел все белые) вы можете настроить с помощью XML-файла - приложение: 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: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" 
    /> 
+0

Вы знаете, как решить [эту проблему?] (Http://stackoverflow.com/questions/39811505/mapview-not-returning-to-normal-state-after-clicking-toggle-switch) – MacaronLover

0

Просто добавить одну строку в XML

app:itemIconTint="@color/white"

Смежные вопросы