¿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:
- CardView setCardBackgroundColor no funcionará
- GetChildDrawingOrder llamado / utilizado de forma errática?
- Sustitución de fragmentos en una actividad que no llama aAttach, onCreate, onCreateView, etc.
- ¿Cómo deshacerse de la advertencia de llamada sospechosa en Android Studio?
- ¿Cómo puedo establecer una conexión con DVR y decodificar los datos?
<?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:
- No se puede cambiar la fuente predeterminada en la aplicación para Android
- Ventana de superposición del sistema Android
- Llamar a System.loadLibrary dos veces para la misma biblioteca compartida
- Android - Tabs, MapView, actividades dentro de las pestañas
- Android EditText rezagado al escribir texto
- Android no crea archivo
- ¿Debo usar! = O == primero al implementar un if else para comparación
- ¿Cómo puedo mantener vivo un hilo de conexión? (¿Necesito usar un daemon?)
¿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.
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.
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 …
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.