Значок элемента ящика навигации, не отображающий исходный цвет

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

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> 

Введите описание изображения здесь

Solutions Collecting From Web of "Значок элемента ящика навигации, не отображающий исходный цвет"

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

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

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

Я пробовал что-то подобное в одном из моих приложений. И да, похоже, что цвет значка не меняется. Но мне удалось сделать еще один обходной путь. Вот мой 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); 

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

Введите описание изображения здесь

Вы можете попробовать использовать тонированное вытягивание, не уверен, работает ли оно ниже 5.0.

Создайте drawable и добавьте следующий код.

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

Просто добавьте одну строку в xml

app:itemIconTint="@color/white"