¿Cómo cambiar el tema de PreferenceActivity?

Estoy tratando de cambiar el tema de la PreferenceActivity en mi aplicación y no puedo conseguir que funcione.

Este es el xml:

<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > <SwitchPreference android:title="Auto Clear" android:key="autoclear" android:summary="Clear the command line when the code is being executed." android:defaultValue="false"/> <ListPreference android:title="Choose a theme" android:negativeButtonText="" android:dialogTitle="" android:key="theme" android:entries="@array/themesList" android:entryValues="@array/themesList" android:defaultValue="Default" /> </PreferenceScreen> 

Y esta es la PreferenceActivity:

  @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.setTheme(R.style.AppTheme); addPreferencesFromResource(R.xml.preferences); } 

Y el resultado es:

Resultado

¿Ha intentado aplicar el tema en la etiqueta de actividad en el manifiesto? Así es como lo he hecho antes –

 <activity android:label="@string/app_name" android:name="com.example.MyPreferenceActivity" android:theme="@android:style/Theme.Black" android:exported="true" android:icon="@drawable/ic_launcher"></activity> 

EDITAR:

La otra opción que podría intentar es anular onApplyThemeResource(Resources.Theme theme, int resid, boolean first) . Mirando el código fuente de android, el método setTheme llamará internamente.

 /** * Called by {@link #setTheme} and {@link #getTheme} to apply a theme * resource to the current Theme object. Can override to change the * default (simple) behavior. This method will not be called in multiple * threads simultaneously. * * @param theme The Theme object being modified. * @param resid The theme style resource being applied to <var>theme</var>. * @param first Set to true if this is the first time a style is being * applied to <var>theme</var>. */ protected void onApplyThemeResource(Resources.Theme theme, int resid, boolean first) { theme.applyStyle(resid, true); } 

Por fin me enteré de cómo cambiar el tema de "PreferenceActivity" de forma programática (a través de código java)

Para cambiar el tema simplemente haz esto:

  @Override public void onCreate(Bundle savedInstanceState) { setTheme(R.style.Holo_Theme_Light); super.onCreate(savedInstanceState); } 

Siempre llame a setTheme(R.style.yourtheme); Método antes de super.onCreate(savedInstanceState); método. Haciendo esto producirá resultado como se muestra abajo.

Introduzca aquí la descripción de la imagen

Eso es todo.

Si yo llamamos setTheme(R.style.yourtheme); Método después de super.onCreate(savedInstanceState); Método producirá resultados como se muestra a continuación.

Introduzca aquí la descripción de la imagen

Nota: Los temas no son reconocidos por la Preferencia de pantalla anidada. Para aplicar el tema a esa PreferidaEstación anidada, tienes que hacer otra PreferenciaActividad para esa setTheme(R.style.yourtheme); anidada y llamar a setTheme(R.style.yourtheme); Método allí.

Si desea cambiar el fondo que podría utilizar

 public class FractalPreferenceActivity extends PreferenceActivity { ....... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setBackgroundDrawableResource(R.drawable.gradient); getListView().setBackgroundColor(Color.TRANSPARENT); getListView().setCacheColorHint(Color.TRANSPARENT); ....... } 

}

Yo personalmente uso este enfoque: para API por debajo de 11 Yo uso (directorio de valores, archivo themes.xml):

  <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyTheme" parent="@android:style/Theme.Light.NoTitleBar"></style> </resources> 

Para mayor (por ejemplo valores-v14 directorio, themes.xml archivo):

  <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyTheme" parent="@android:style/Theme.Holo.Light.NoActionBar"></style> </resources> 

Y manifiesto:

  <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > 

Android seleccionará automáticamente un tema basado en la API del dispositivo y no será necesario especificar ningún tema en las actividades (manifiesto) o gramaticalmente en el código …

Temas

Esto va a sonar estúpido, pero el uso de setTheme() funcionará en todos sus fragmentos, pero no la actividad de preferencia principal. Establezca esto en el archivo de manifiesto, y de repente comenzará a funcionar.

setTheme() el tema dinámicamente basado en las preferencias del usuario, llamando a setTheme() antes de la onCreate del objeto del encargado del tema (también doles hacia fuera varios colores y drawables que se pueden cambiar por el tema que no quiero fijar en estilos … Principalmente porque es demasiado confuso para averiguar qué es lo que).

No tiene idea de por qué establecerlo en el manifiesto hace que setTheme() funcione. Sólo algunos glitch específicos de la actividad de preferencia, supongo.

  • Mostrar siempre el título del marcador de mapa en Android
  • Cómo calcular el tamaño de un archivo en Android
  • ¿Cómo replicar el botón de acción flotante Inbox (con texto para cada botón secundario)?
  • Singletons vs. Contexto de la aplicación en Android?
  • ¿Por qué mi fuente de SDK de Android no está completa?
  • Cómo hacer una relación bidireccional uno-a-uno por GreenDAO?
  • Cómo colorear una parte específica de una cadena
  • Tratando de verificar si existe un archivo en el almacenamiento interno
  • ¿Por qué se recomienda llamar a MultiDex.install () en attachBaseContext (Context)?
  • Problemas con la biblioteca de soporte de Renderscript
  • Android Phonegap 2.1> 2.2 Error de actualización
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.