Значок элемента ящика навигации, не отображающий исходный цвет
Я пытаюсь показать значок рядом с элементом в моем меню для своего навигационного ящика, но по какой-то причине значок всегда отображается серым цветом, а не исходным (коричневый). Есть ли способ предотвратить это, чтобы показать исходный цвет значка?
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]()
Ответы
Ответ 1
Я нашел ответ здесь: fooobar.com/questions/65747/...
Чтобы избежать ссылки, это довольно просто:
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>
Ответ 2
Используйте
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"
/>
Ответ 3
Я пробовал что-то подобное в одном из моих приложений. И да, похоже, что цвет значка не меняется. Но мне удалось сделать еще один обходной путь. Здесь мой 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]()
Ответ 4
Вы можете попробовать использовать тонированное вытягивание, не уверен, работает ли оно ниже 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 Я много использую в своих проектах.
Ответ 5
Просто добавьте одну строку в xml
app:itemIconTint="@color/white"