Cambiar el color de resaltado y título de los fragmentos en PreferenceActivity
Estoy usando el tema Material, y me gustaría cambiar el color de las dos áreas marcadas en la imagen de abajo, es decir, el color de resaltado (# 1) y el color del título en el fragmento de detalles (# 2).
Sé que hay un atributo para el color de cada uno en el tema, pero no puedo encontrarlo.
- Ajustar el conjunto dibujable a android: windowBackground
- ¿Cómo cambiar de tema (modo nocturno) sin reiniciar la actividad?
- ¿Cómo puedo modificar Theme.Holo.Light.Dialog para ocupar menos espacio en la pantalla?
- Configuración del color de fondo del tema de Android
- Tema de botón incorrecto al cambiar el modo Día / Noche
¿Algunas ideas?
- ¿Puede colocarse un WindowBackground debajo de la barra de estado y encima de la barra de navegación?
- Tema predeterminado de Android
- Leer atributos de tema más reciente en la plataforma anterior
- Cambiar el color de resaltado del elemento seleccionado para el menú del menú de menú duro
- Configuración de Theme.Holo.Light cambia todo, excepto las casillas de verificación en la lista
- Dependiendo de los recursos
- Menú desplegable Styling ActionBar
- Confundido acerca del estilo TextAppearance en app compat v21
Sé que hay un atributo para el color de cada uno en el tema, pero no puedo encontrarlo.
Número de artículo 1
El atributo que deseará está activatedBackgroundIndicator
.
Según los documentos
Dibujable utilizado como fondo para los elementos activados.
Razón de ser
El diseño utilizado para cada elemento de encabezado en una PreferenceActivity
es preference_header_item_material
que utiliza el activatedBackgroundIndicator
como fondo. Necesitará un selector para este atributo, algo así como:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true"><color android:color="yourColor" /> </item> <item><color android:color="@android:color/transparent" /> </item> </selector>
Número de artículo 2
Este artículo es ligeramente más complicado. No es un PreferenceScreen
como usted sugirió en la otra respuesta, pero el FragmentBreadCrumbs
título. Desafortunadamente, el color del título no se puede establecer usando un tema porque el atributo utilizado para estilo es privado interno.
Sin embargo, puede establecer el color del texto con Reflection o simplemente cruzando la jerarquía de vista de la TextView
hasta que encuentre TextView
utilizado para mostrar el título.
El diseño utilizado para mostrar el contenido de cada PreferenceActivity
es preference_list_content_material
que incluye el diseño breadcrumbs_in_fragment_material
para mostrar cada breadcrumb. Usted puede ver desde ese diseño que el ID de cada FragmentBreadCrums
es android:id/title
. Ahora podemos usar este id para encontrar el breadcrumb y ajustar el TextView
dentro de él.
Uso de la reflexión
@Override public void onBuildHeaders(List<Header> target) { super.onBuildHeaders(target); loadHeadersFromResource(R.xml.yourPreferenceHeaders, target); final View breadcrumb = findViewById(android.R.id.title); if (breadcrumb == null) { // Single pane layout return; } try { final Field titleColor = breadcrumb.getClass().getDeclaredField("mTextColor"); titleColor.setAccessible(true); titleColor.setInt(breadcrumb, yourTitleColor); } catch (final Exception ignored) { // Nothing to do } }
Desplazamiento de la jerarquía de vistas
Usar View.findViewsWithText
es una manera fácil de manejar esto.
breadcrumb.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { breadcrumb.getViewTreeObserver().removeOnGlobalLayoutListener(this); final ArrayList<View> outViews = Lists.newArrayList(); breadcrumb.findViewsWithText(outViews, getString(R.string.your_header_title), View.FIND_VIEWS_WITH_TEXT); ((TextView) outViews.get(0)).setTextColor(yourTitleColor); } });
Resultados
- ¿Cuál es la diferencia entre la cadena de herramientas ndk r9 legacy de android y android ndk r9 en windows 64
- Hacer algunas cosas de la interfaz de usuario de Android en un subproceso no UI