好的,所以问题是我试图让我的Android应用程序为用户设置活动,以便能够更改某些应用程序的功能(语言,主题,... )。当我试图让应用程序对其中一个首选项的值的变化做出反应时,我的问题出现了。例如主题一;我的想法是拥有一个" Switch首选项"。当它打开时,应用程序的主题将是Material.Light,当关闭时,Material。对于这个我虽然有一些" onValueChanged"当开关改变其位置时会作出反应的方法。这里的问题是我无法在SettingsActivity中正确获取SwitchPreference的实例,因为" findPreference(key)"方法已弃用,我并不知道如何使其获取所需密钥的值。
有任何方法可以做到这一点,还是应该改变思考这个问题的方式?
答案 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;
}
}
希望这个选项可以帮助你!!!