Color de fondo personalizado para el elemento seleccionado con "activatedBackgroundIndicator" Navigation Drawer
Esta pregunta se ha hecho mucho en SO, y he hecho referencia a todas las respuestas. Todavía me queda el fondo azul de Holo predeterminado para los elementos seleccionados en mi cajón de navegación. Soy nuevo en Java y estoy confundido acerca de la parte "context" de .setAdapter()
.
Mi proyecto es una sola actividad con múltiples fragmentos intercambiados usando el cajón nav.
Aquí está mi adaptador:
- ¿Cuál es el color hexadecimal predeterminado de la barra de acción Holo.Light.DarkActionBar?
- Color de fondo predeterminado de Theme.AppCompat.Light android
- Estilo de diálogo de preferencias de Android
- Cómo hacer aplicaciones hermosas y con estilo como Timely
- Cómo aplicar un estilo personalizado a SwitchCompat
mDrawerListView.setAdapter(new ArrayAdapter<String>( // First parameter - Context getActionBar().getThemedContext(), // Second parameter - Layout for the row R.layout.fragment_navigation_drawer_list_item, // Third parameter - ID of the TextView to which the data is written android.R.id.text1, // Forth - the Array of data new String[]{ getString(R.string.title_section1), getString(R.string.title_section2), getString(R.string.title_section3), getString(R.string.title_section4), })); mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
El contexto aquí viene del cajón de navegación "pre-cocinado" en Android Studio. Pensé que esto sería el color de fondo del artículo del cajón de la navegación de la respuesta para el artículo seleccionado . Así que cambié mi contexto a getActivity().getBaseContext(),
pero eso no cambió nada.
Mi tema ( styles.xml
):
<resources> <style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> <!-- API 14 theme customizations can go here. --> <item name="android:actionBarStyle">@style/ActionBar</item> </style> <!-- Navigation Drawer styling --> <style name="NavDrawerItemSelected" parent="AppBaseTheme"> <item name="android:activatedBackgroundIndicator">@drawable/activated_background</item> </style> </resources>
activated_background
en 'drawables' dir:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@color/green" /> <item android:state_selected="true" android:drawable="@color/green" /> <item android:state_pressed="true" android:drawable="@color/green" /> <item android:state_checked="true" android:drawable="@color/green" /> <item android:drawable="@android:color/transparent" /> </selector>
No sé cuál de esos estados supuestamente se supone para ser utilizado, así que agregué todos ellos que podría encontrar.
Finalmente, cuando se selecciona un elemento mDrawerListView.setItemChecked(position, true);
se llama.
Todo funciona, excepto para el estilo de tema personalizado. (API min = 11, pruebas en API 17 AVD)
- Enlace de datos con atributos temáticos
- ¿El panel de vista previa del estudio de Android no representa ActionBar?
- PlacePicker no recoge temas de material
- Android personalizado IcsSpinner (de ActionBarSherlock)
- Tema no aplicado con la biblioteca appcompat en algunos dispositivos Android 4.X
- Android: cómo usar el color del estilo en XML de otro diseño
- Estilos comunes para v10 y v11 +?
- Cambiar android Estilo de EditText del borde rectangular al subrayado
Me he topado con este problema exacto. El problema es que el fondo de R.layout.fragment_navigation_drawer_list_item
es lo que necesita ser cambiado a su drawable. Simplemente añada android:background="@drawable/activated_background"
al diseño.
No pude encontrar una respuesta clara y completa a esta pregunta, así que aquí está:
Paso 1. Especifique la distribución de elementos de lista que su adaptador utilizará, en este ejemplo estamos especificando: R.layout.fragment_navigation_drawer_list_item
Al igual que:
mDrawerListView.setAdapter(new ArrayAdapter<String>( // First parameter - Context getActionBar().getThemedContext(), // Second parameter - Layout for the row R.layout.fragment_navigation_drawer_list_item, // Third parameter - ID of the TextView to which the data is written android.R.id.text1, // Forth - the Array of data new String[]{ getString(R.string.title_section1), getString(R.string.title_section2), getString(R.string.title_section3), getString(R.string.title_section4), }))`
Paso 2. Cree y personalice fragment_navigation_drawer_list_item.xml
para especificar un drawable que tendrá un selector así: android:background="@drawable/activated_background"
Ejemplo completo:
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:minHeight="?android:attr/listPreferredItemHeightSmall" android:background="@drawable/activated_background" />
Paso 3. Cree y personalice el selector en su archivo activated_background.xml
como en la pregunta, se verá así:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@color/green" /> <item android:state_selected="true" android:drawable="@color/green" /> <item android:state_pressed="true" android:drawable="@color/green" /> <item android:state_checked="true" android:drawable="@color/green" /> <item android:drawable="@android:color/transparent" /> </selector>
- No se puede usar como cláusula en la aplicación android
- Android – ImageView bottomCrop en lugar de centerCrop