2012-08-02 18 views
5

Czy możliwe jest utworzenie Theme zamiast ograniczonej liczby prekompilowanych kompozycji (co oznacza, że ​​zarówno dostarczonych przez system tematów i zasobów xml)? Temat zostanie zastosowany podczas uruchamiania aplikacji w oparciu o konfigurację użytkownika (wartości zmieniają się w czasie wykonywania, ale przed utworzeniem stylizowanej aktywności, wartości pochodzą z usług http z dużego zakresu, a nie z zestawu).Nie używaj wstępnie skompilowanego motywu

Każde inne rozwiązanie jest mile widziane, dopóki nie będzie wymagało użycia dostosowanych klas widoku wszędzie.

Na razie potrzebuję ustawić globalny domyślny kolor tekstu TextView i oczywiście nie chcę używać podklasy wszędzie, myślę, że nie ma wielkiej katastrofy od utraty optymalizacji, a przynajmniej byłoby wspaniale zobacz różnicę wydajności.

Odpowiedz

1

To może być trochę zbyt hacky, ale tutaj jest strzał.

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

I wszystkie twoje działania rozszerzają BaseActivity.

+0

To nie jest złe, dzięki –

1

Przesłoń ContextThemeWrapper.getTheme() w swojej Działalności i podaj własną Theme. Korzystne jest

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

Korzystanie motyw w stylu pliku xml:

lub zastosować wstępnie zdefiniowany temat w Activity.onCreate przed wywołaniem do super.onCreate, zapewniając własny identyfikator zasobu motyw. Możesz dziedziczyć niektóre motywy systemowe i zastępować tylko potrzebne atrybuty. Przykład Twojego 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> 

Stylizacja i motywy są silne, jednak nie brak dokumentacji dogłębnej i żadne narzędzia wysokiego poziomu.

+0

Tak to zrobię. Myślę, że jest to najlepszy/czysty sposób na osiągnięcie tego bez hacków. – shkschneider

+0

Nie mogę zrozumieć na podstawie odpowiedzi, jak ustawić atrybut stylu niewymagający zasobu xml, pytanie brzmi: jak zmienić motyw powiedz po otrzymaniu textView textColor z serwletu, nie w jaki sposób mogę zastosować jeden z kilku przygotowanych xmls. Zaktualizowano pytanie, aby uniknąć nieporozumień w przyszłości. –

Powiązane problemy