Práctica recomendada para proporcionar varios temas de aplicaciones para Android

Estoy tratando de averiguar cómo organizar una aplicación de Android que tendrá múltiples temas. Aquí está un ejemplo simplificado de mi problema,

2 temas, "ligero" y "oscuro",
Dentro de cada tema, dos colores de texto: "enabled" y "disabled"

Ahora el problema es que cuando defino mi TextView, no quiero llamar a "luz" o "oscuro", quiero especificar el tema en el nivel de aplicación y lo han aplicado. Básicamente, quiero selectores CSS. Quiero ser capaz de definir mi tema como,

<style name="Light.enabled" .../> <style name="Light.disabled" .../> 

Y mi opinión del texto como,

 <TextView style="@style/.enabled" .../> <TextView style="@style/.disabled" .../> 

Y hacer que se aplique "enabled" o "disabled" basado en si he llamado "light" o "dark" en el nivel de la aplicación.

Esta página, http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

Muestra una aplicación que

  1. Define un estilo, diga "light.enabled"

    # 000000

  2. Define una referencia de atributo, digamos "enabled"

  3. Define un tema de estilo (tema) como,

    @ Style / light.enabled

  4. Utiliza el attr para definir el estilo en la vista,

Esto es lo que quiero, pero no funciona para mí. El único diff es que estoy usando un appwidget. El autor establece el tema en la actividad. El único lugar que puedo establecer es Context.setTheme (), y en la etiqueta "application" en el manifiesto. Ninguno de los cuales parece hacer una diferencia.

No puede aplicar temas a los widgets de aplicaciones. Sólo tendrá que tener diferentes XML que utiliza diferentes estilos.

Además, es confuso cuando se habla de luz frente a oscuro y habilitado o deshabilitado como cosas similares. Son muy diferentes en la plataforma.

  • La luz y la oscuridad son "temas" reales como la plataforma lo define, que es un conjunto de valores por defecto para atributos de recursos, arraigados fuera de android: style / Theme. Estos se cambian con android: theme en el manifiesto o setTheme () en la API.

  • Habilitados y deshabilitados son estados. Se utilizan con StateListDrawable (vía etiqueta en drawable /) o ColorStateList (vía etiqueta en color /) para elegir un drawable / color basado en el estado habilitado.

Por ejemplo aquí es un color que cambia basado en estado:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/color/primary_text_dark.xml

Y aquí está un dibujable que cambia basado en estado:
https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/drawable/btn_default.xml

He encontrado esta página, http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html

Que da un ejemplo excelente de la aplicación de múltiples temas dinámicamente. Parece que no puedo conseguir que funcione con un widget de aplicación, pero eso es un problema diferente.

Si está intentando admitir varios temas en la aplicación.

  1. Defina el tema en values ​​/ styles.xml

     <style name="AppTheme" parent="Theme.AppCompat.Light"> 

    @ Drawable / ic_mode_comment_white_24dp

    … @ drawable / ic_subject_black_24dp

  2. Definir colores en colors.xml

<resources> <color name="colorPrimary">#FF9800</color> </resources>

  1. Cambiar temas en tiempo de ejecución de la actividad

    public abstract class BaseActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { if (PreferenceManager.getDefaultSharedPreferences(this) .getBoolean("pref_dark_theme"), false)) { setTheme(R.style.AppTheme_Dark); } super.onCreate(savedInstanceState); } }

Siga estos artículos part1 y part2

  • Cambiar el color azul por defecto en el tema de Android holo a naranja (o cualquier otra cosa)
  • Cambio de tema en el proyecto android en eclipse
  • Cómo extraer valores de color (#rgb) de un tema de Android?
  • Establecer tema personalizado en la lista de preferencias de Android
  • Uso de un tema para la pantalla de preferencias
  • ¿Cómo cambiar o agregar un tema a Android Studio?
  • Android: clipToPadding no funciona desde el tema, pero funciona como un estilo
  • Eliminar el efecto sombra en el botón android
  • Android: los márgenes especificados en estilo personalizado no tienen efecto
  • Cómo cambiar el color del hilandero, el texto y el botón del material AlertDialog y ProgressDialog
  • ¿Cómo configurar diferentes temas para el selector de botones?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.