2012-08-02 9 views
5

¿Es posible crear el Theme en lugar de tener el número limitado de temas precompilados (es decir, ambos el sistema operativo envió temas y recursos xml)? El tema se aplicará durante el lanzamiento de la aplicación según la configuración del usuario (los valores cambian en el tiempo de ejecución pero antes de que se cree la actividad con estilo, los valores provienen de servicios http de un rango grande en lugar de un conjunto).No utilice un tema precompilado

Cualquier otra solución es bienvenida hasta que se requiera el uso de las clases de vista personalizadas en todas partes.

Lo que necesito ahora es establecer el color de texto predeterminado global de TextView y por supuesto no quiero usar la subclase en todas partes, creo que no hay un gran desastre al perder la optimización o al menos sería genial ver la diferencia de rendimiento

Respuesta

1

Bueno, esto podría ser un poco demasiado hacky, pero aquí está una oportunidad.

public class BaseActivity extends Activity{ 

    @Override 
    public void onResume() { 
     ViewGroup root = ((ViewGroup)findViewById(android.R.id.content)); 
     applyTheme(root); 
    } 

    private void applyTheme(View view){ 
     if (view instanceof ViewGroup && ((ViewGroup) view).getChildCount() !=0){ 
      for (int i = 0; i< ((ViewGroup) view).getChildCount(); i++){ 
       applyTheme(((ViewGroup) view).getChildAt(i)); 
      } 
     } else { 
      if (view instanceof TextView){ 
       ((TextView) view).setTextColor(your_color_from_server_here); 
      } 
     } 
    } 
} 

Y extienda todas sus actividades BaseActivity.

+0

Eso no está nada mal, gracias –

1

Anule ContextThemeWrapper.getTheme() en su actividad y proporcione su propio Theme. se prefiere

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

Usando el tema en el archivo de estilo xml:

O aplicar tema predefinido en Activity.onCreate antes de llamar a super.onCreate, proporcionando ID propio recurso tema. Puede heredar algún tema del sistema y anular solo los atributos necesarios. Ejemplo de su style.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="MyTheme" parent="android:Theme.Holo"> 
     <item name="android:textColorPrimary">#0f0</item> 
    </style> 
</resources> 

Styling y los temas son de gran alcance, sin embargo, no es la falta de documentación en profundidad, y no hay herramientas de alto nivel.

+0

Así es como lo haría. Creo que esta es la mejor/más limpia forma de lograr esto sin hacks. – shkschneider

+0

No puedo entender por la respuesta cómo configuro el atributo de estilo que no tiene el recurso xml, la pregunta es cómo puedo cambiar el tema decir después de recibir el textView textColor del servlet, no cómo puedo aplicar uno de los pocos preparados xmls. Actualizó la pregunta para evitar confusiones en el futuro. –

Cuestiones relacionadas