Android 5.0 – las casillas de verificación de las preferencias no son visibles

Estoy en el proceso de actualizar mi aplicación a Android 5.0 Lollipop diseño basado en AppCompat v21.

Todo funciona bastante bien, pero me golpeó un problema con la pantalla de preferencias donde las casillas de verificación no son visibles. Están en la pantalla y puedo verlos cuando toda la sección se resalta cuando se toca. La funcionalidad está bien y las preferencias se actualizan correctamente.

En todas las demás casillas de verificación de la aplicación se muestran sin ningún problema.

Además, funciona sin problemas en Android 2.3.

Casillas de verificación que faltan en la 2ª y 3ª configuración:

introduzca la descripción de la imagen aquí

Casilla de verificación visible al tocar la fila:

introduzca la descripción de la imagen aquí

Preferencias y el código para ellos es muy básico y no tiene nada personalizado añadido.

Mi archivo xml con las preferencias tiene este aspecto (sólo las casillas de verificación copiadas):

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <CheckBoxPreference android:key="show_romaji" android:title="@string/preferences_romaji_title" android:summary="@string/preferences_romaji_explanation" android:defaultValue="true" android:persistent="true" /> <CheckBoxPreference android:key="send_statistics" android:title="@string/preferences_statistics_title" android:summary="@string/preferences_statistics_explanation" android:defaultValue="true" android:persistent="true" /> </PreferenceScreen> 

Actividad de preferencias:

 public class PreferenceActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Display the fragment as the main content. getFragmentManager().beginTransaction() .replace(android.R.id.content, new SharedPreferenceFragment()) .commit(); } } 

Preferencias fragmento:

 public class SharedPreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); } } 

Estoy usando un tema que no tiene casi nada definido:

 <?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.JlptVocabulary" parent="Theme.AppCompat"> <!-- Set AppCompat's color theming attrs --> <item name="colorPrimary">#ffe91e63</item> <item name="colorPrimaryDark">@color/black</item> <!-- The rest of your attributes --> <item name="android:windowBackground">@color/backgroundBlack</item> </style> </resources> 

Estoy atascado con este problema y no he sido capaz de encontrar una solución después de hacer algunas investigaciones y experimentos. ¿Alguien tiene una pista?

Las casillas de verificación de las preferencias del estilo Theme.AppCompat son negras (contorno y relleno del cuadro excepto la marca de verificación). La marca de verificación toma el color del fondo de las preferencias. En tu caso, estás configurando fondo negro, por lo que las casillas de verificación no se muestran ya que ahora son todas de color negro. Sugiero usar un estilo separado (por ejemplo: Theme.Pref_JlptVocabulary) para las preferencias con su fondo gris normal para que aparezcan las casillas de verificación.

 <?xml version="1.0" encoding="utf-8"?> <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="Theme.Pref_JlptVocabulary" parent="Theme.AppCompat"> </style> </resources> 

La otra manera sería personalizar las casillas de verificación de fondo y marcar los colores de la marca, redefiniendo el estilo de las vistas de casilla de ver cómo-a-personalizar-el-color-de-la-marca-color-en-android ….

También puede probar con uno de los ThemeOverlays

 <style name="SettingsTheme" parent="ThemeOverlay.AppCompat.Dark"> <item name="android:windowBackground">@color/backgroundBlack</item> </style> 

Encontré que esto dio cajas apropiadas en un fondo negro. Sin embargo, en dispositivos Lollipop (valores-v21) todavía uso el tema regular que extiende Theme.Appcompat ya que ThemeOverlay parecía anular los valores de "colorAccent" en los teléfonos Lollipop

Encontré otra solución para el problema.

Esto puede causar porque si fijamos colorControlNormal igual que el color de fondo de la aplicación en el tema MyMaterialTheme.Base en el archivo style.xml .

Solución : Cambie colorControlNormal con excepción del color de fondo del defecto de la aplicación.

  • GetActionBar () devuelve null en PreferenceActivity (AppCompat-v7 21)
  • ¿Cómo manejar texto largo en las preferencias de Android?
  • Configuración de valores predeterminados de varias instancias / archivos de SharedPreferences
  • El botón de retroceso de Android no vuelve a la actividad anterior
  • Agregar barra de acción con botón de retroceso en la actividad de preferencia
  • PreferenciaActividad: guardar valor como entero
  • ¿Cómo agregar un "oyente de clic largo" a una preferencia?
  • ¿Hay una manera de mantener los divisores alrededor de una preferencia no seleccionable?
  • Preferencias de Android y fragmentos de diálogo
  • ¿Cómo puedo seleccionar el encabezado predeterminado en mi PreferenceActivity en tabletas?
  • Uso de preferencias no predeterminadas en PreferenceActivity
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.