响应更改android中的设置活动

时间:2017-02-14 17:35:08

标签: android android-theme android-settings

好的,所以问题是我试图让我的Android应用程序为用户设置活动,以便能够更改某些应用程序的功能(语言,主题,... )。当我试图让应用程序对其中一个首选项的值的变化做出反应时,我的问题出现了。例如主题一;我的想法是拥有一个" Switch首选项"。当它打开时,应用程序的主题将是Material.Light,当关闭时,Material。对于这个我虽然有一些" onValueChanged"当开关改变其位置时会作出反应的方法。这里的问题是我无法在SettingsActivity中正确获取SwitchPreference的实例,因为" findPreference(key)"方法已弃用,我并不知道如何使其获取所需密钥的值。

有任何方法可以做到这一点,还是应该改变思考这个问题的方式?

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作,而不是在onValue更改侦听器中设置主题:

1)创建ThemeUtils类并为主题选择切换案例并为活动设置主题。我创建了自己的风格,你可以在这里选择你的名字

public class ThemeUtils {
public final static int THEME_Professional = 1;
public final static int THEME_Default = 2;
public static void onActivityCreateSetTheme(Activity activity, int sTheme) {
    switch (sTheme)
    {
    default:
    case THEME_Professional:
        activity.setTheme(R.style.ProfessionalTheme);
        break;
    case THEME_Default:
        activity.setTheme(R.style.DefaultTheme);
        break;
    }
}

}

2)在Activity的onCreate方法中,调用setTheme方法

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme();
  }

3)获取用户选择的主题

   private void setTheme() {
    int themeInt = getThemeValue();
    ThemeUtils.onActivityCreateSetTheme(this, themeInt);
   }

4)获取样式id后,可以调用ThemeUtils类方法onActivityCreateSetTheme

private int getThemeValue() {
    SharedPreferences pref =     PreferenceManager.getDefaultSharedPreferences(getContext());
    Boolean isGrid = pref.getBoolean(getString(R.string.grid_switch), false);
    if (isGrid) {
        return 2;
    } else {
        return 1;
    }
}

希望这个选项可以帮助你!!!