2012-08-02 8 views
5

È possibile creare il Theme invece di avere il numero limitato di temi precompilati (ovvero sia i temi inviati dal sistema operativo sia xml di risorse)? Il tema verrà applicato durante l'avvio dell'applicazione in base alla configurazione dell'utente (i valori stanno cambiando in fase di esecuzione ma prima che venga creata l'attività in stile, i valori provengono dai servizi http da una vasta gamma piuttosto che da un set).Utilizzare un tema precompilato

Qualsiasi altra soluzione è benvenuta fino a quando non è necessario utilizzare le classi Vista personalizzate ovunque.

Quello che mi serve per ora è impostare il colore del testo TextView globale e, naturalmente, non voglio usare la sottoclasse ovunque, penso che non ci sia un enorme disastro da perdere l'ottimizzazione o almeno sarebbe bello per vedere la differenza di prestazioni.

risposta

1

Beh, questo potrebbe essere un po 'troppo hacky ma ecco uno scatto.

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); 
      } 
     } 
    } 
} 

e hanno tutte le vostre attività si estendono BaseActivity.

+0

Non è affatto male, grazie –

1

Ignorare ContextThemeWrapper.getTheme() nella propria attività e fornire il proprio Theme.

Oppure applicare tema predefinito in Activity.onCreate prima di chiamare a super.onCreate, fornendo il proprio ID di risorsa tema:

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

Utilizzando tema in un file XML stile è preferito. È possibile ereditare alcuni temi di sistema e sovrascrivere solo gli attributi necessari. Esempio del vostro 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 e temi sono potenti, ma c'è mancanza di documentazione in modo approfondito, e non strumenti di alto livello.

+0

Ecco come lo farei. Penso che questo sia il modo migliore/più pulito per ottenere questo risultato senza hack. – shkschneider

+0

Non riesco a capire dalla risposta come faccio a impostare l'attributo di stile che non ha la risorsa xml, la domanda è come faccio a cambiare il tema dire dopo aver ricevuto textView textColor da servlet, non come posso applicare uno dei pochi preparati XMLs. Aggiornato la domanda per evitare confusione in futuro. –