2013-07-25 4 views
1

В моей программе я должен программно переключать темы приложений. То есть, есть возможность переключать светлые и темные темы. Какова наилучшая практика? Могу ли я создавать и управлять наборами стилей? Например, у меня есть это текстовое окно и кнопка.Лучший способ управлять темами приложений Android

<Button 
       android:id="@+id/btn" 
       style="@style/BT_list" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/OK" /> 

      <TextView 
       android:id="@+id/tv" 
       style="@style/TText" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:text="@string/msg" /> 

У меня есть этот стиль:

<style name="BT_list"> 
    <item name="android:layout_width">match_parent</item> 
    <item name="android:layout_height">30dp</item> 
    <item name="android:textColor">@color/green_color</item> 
    <item name="android:gravity">center</item> 
    <item name="android:paddingLeft">0dp</item> 
    <item name="android:paddingRight">0dp</item> 
    <item name="android:layout_marginLeft">0dp</item> 
    <item name="android:layout_marginRight">0dp</item> 
    <item name="android:textSize">15sp</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:background">@drawable/grad</item> 
</style> 


<style name="TText"> 
    <item name="android:textColor">@color/text_color</item> 
    <item name="android:background">@color/white"</item> 
</style> 

Как я могу изменить значения с чем-то вроде setTheme(); программно для обоих (возможно, больше) стилей?

ответ

1

Вы можете создать активность предпочтений, которая дает пользователю возможность изменить тему. После этого в методе OnCreate деятельности вы хотите тему, вы можете использовать:

SharedPreferences prefs = PreferenceManager 
      .getDefaultSharedPreferences(this); 
    String userTheme = prefs.getString("theme", "1"); 
    if (userTheme.equals("1")) 
     setTheme(R.style.ThemeDark); 
    else if (userTheme.equals("2")) 
     setTheme(R.style.ThemeLight); 

И в вашем Styles.xml вы можете добавить

<style name="ThemeDark" parent="Holo.Theme"> 
     <!-- your changes go here --> 
    </style> 
    <style name="ThemeLight" parent="Holo.Theme.Light"> 
     <!-- your changes go here --> 
    </style> 

Примечание: Это мой собственный метод изменения темы, используемый с ABS и HoloEverywhere. Это не сработает, если вы не пользуетесь этими библиотеками.

Смежные вопросы