java - vestirse - El ícono del elemento del cajón de navegación no muestra el color original
ropa roja para mujer (8)
Estoy tratando de mostrar un icono junto a un elemento dentro de mi menú para mi cajón de navegación, pero por alguna razón, el icono siempre aparece en gris en lugar del color original (marrón). ¿Hay alguna forma de evitar que esto suceda para mostrar el color original del icono?
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>
Agrega esto
android:tint="@color/colorPrimary"
Encontré la respuesta aquí: https://.com/a/30632980/875249
Para evitar el enlace es bastante sencillo:
mNavigationView.setItemIconTintList(null);
Esto desactiva todos los tintes basados en estado, pero también puede especificar su propia lista. ¡Funciono muy bien para mi!
Aquí es donde puede obtener los detalles sobre cómo crear una lista de estados de color, pero también es bastante simple: 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>
He intentado algo similar en una de mis aplicaciones.
Y sí, parece que el color del icono no cambia.
Pero me las arreglé para hacer con otra solución.
Aquí está mi
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>
Creo que es algo similar a ti, pero no tiene ningún efecto y no cambia el color.
Entonces lo que hice es esto.
navigationView.getMenu()
.findItem(R.id. navigation_item_1)
.getIcon()
.setColorFilter(Color.parseColor("#b69260"), PorterDuff.Mode.SRC_ATOP);
Y parece estar funcionando. Aquí está el resultado.
Puede intentar usar un dibujo teñido, no estoy seguro si funciona por debajo de 5.0.
Crea un dibujo y agrega el siguiente código.
<?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"/>
Y luego cambie su elemento de menú dibujable al que acaba de crear. Si eso no funciona, entonces no estoy seguro de ninguna otra solución. Puedes probar esta biblioteca: https://github.com/mikepenz/MaterialDrawer La uso mucho en mis proyectos.
Si crea un proyecto con el cajón de navegación que proporcionó
Android Studio
.
En su clase de actividad principal, simplemente puede agregar esta línea de código
navigationView.setItemIconTintList(null);
a su método
onCreate
.
Me gusta esto;
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
navigationView.setItemIconTintList(null); // <----- HERE
setupDrawerContent(navigationView);
Solo agregue una línea en xml
app:itemIconTint="@color/white"
Utilizar
mNavigationView.setItemIconTintList(null);
es lo correcto. Además, si todos sus iconos están en un esquema de color (tenía todo blanco), puede configurarlo a través del archivo xml - app: itemIconTint = "@ android: color / white"
Mi caso:
<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"
/>
De alguna manera, este código no funciona MainActivity.java
NavigationView.setItemIconTintList(null); // not working
para que puedas usarlo.
MainActivity.java
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
navigationView.setItemIconTintList(null); // <-- HERE add this code for icon color