0

我在通过更改应用程序设置中的偏好来以编程方式设置主题时遇到问题,我想在单击设置中的选项时在 Holo 和 Holo Light 之间切换。

任何建议,源代码,知识,链接等都表示赞赏,谢谢


仪表板活动.java

public class DashboardActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Utils.onActivityCreateSetTheme(this);
    setContentView(R.layout.dashboard_layout);

    if (Settings.theme.equals("Theme1")) {
        Utils.changeToTheme(this, Utils.THEME_LIGHT);

}else (Settings.theme.equals("Theme2")) {

    Utils.changeToTheme(this, Utils.THEME_DARK);

}

设置.java

     public class Settings extends PreferenceActivity implements  
          OnSharedPreferenceChangeListener {   

 public static String theme = "Theme1";

    public void onBackPressed() {
    //  ListPreference listPreference2 = (ListPreference) findPreference("activityPref");
        ListPreference listPreference = (ListPreference) findPreference("themePref");
        String currValue = listPreference.getValue();
    //  String currValue2 = listPreference.getValue();
//      Log.d("ssss", "Value :" + currValue);
    //  Log.d("ssss", "Value :" + currValue2);

    //  activity = currValue2;
        theme = currValue;
        super.onBackPressed();

设置.xml

   <ListPreference
            android:title="Themes"
            android:summary="Change the UI of the application"
            android:key="themePref"
            android:entries="@array/themesReturnValue"
            android:entryValues="@array/themesDisplayWord" 
            android:defaultValue="Theme1"/>

数组.xml

    <string-array name="themesReturnValue">
    <item>Light</item>
    <item>Dark</item>

    </string-array>   
    <string-array name="themesDisplayWord">
    <item>Theme1</item>
    <item>Theme2</item>

风格

    <style name="LightThemeAndroid" parent="android:style/Theme.Holo.Light"> 
     </style>
   <style name="DarkThemeAndroid" parent="android:style/Theme.Holo">
    </style>

这就是我得到的一切......我知道这是一项任务,但是任何帮助都非常感谢。谢谢

4

1 回答 1

0

缺少代码的重要部分,例如Utils.onActivityCreateSetTheme(this);可以Utils.changeToTheme(this, Utils.THEME_LIGHT);解释什么是错误/不工作的。

但是,这就是我为我的应用程序解决它的方式。

设置.xml

<ListPreference
   android:title="@string/theme_label"
   android:summary="@string/theme_summary"
   android:key="@string/theme_key"
   android:defaultValue="0"
   android:entries="@array/theme_entries"
   android:entryValues="@array/theme_values" />

字符串.xml

<string name="theme_label">Theme</string>
<string name="theme_summary">Change the app theme</string>
<string name="theme_key">theme</string>

数组.xml

<string-array name="theme_entries" translatable="false">
   <item>Holo Light</item>
   <item>Holo Dark</item>
</string-array>
<string-array name="theme_values" translatable="false">
   <item>0</item>
   <item>1</item>
</string-array>

实用程序.java

public class Util extends Activity {

public static void setAppTheme(Activity a) {
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(a);
    int mTheme = Integer.parseInt(sp.getString("theme", "0"));
    if (mTheme == 0) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
                a.setTheme(android.R.style.Theme_Holo_Light_DarkActionBar);
                return;
            }
            a.setTheme(android.R.style.Theme_Holo_Light);
        }
        else {
            a.setTheme(android.R.style.Theme_Light);
        }
    }
    else {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        a.setTheme(android.R.style.Theme_Holo);
    } else {
        a.setTheme(android.R.style.Theme_Black);
        }
    }
}

MainActivity.java

@Override
public void onCreate(Bundle savedInstanceState) {
    Util.setAppTheme(this);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    }
于 2013-04-21T04:21:00.827 回答