テーマごとに定数を定義せずに、設定にテーマを保存するにはどうすればよいですか?
スタイル リソース ID の取得と保存は非常に簡単ですが、更新で変更される可能性もあります。
スタイル名の方が適切なオプションのようです。それがその方法である場合、リソース ID を指定してテーマ名を取得する方法と、テーマの名前を指定してリソース ID を取得する方法を教えてください。
テーマごとに定数を定義せずに、設定にテーマを保存するにはどうすればよいですか?
スタイル リソース ID の取得と保存は非常に簡単ですが、更新で変更される可能性もあります。
スタイル名の方が適切なオプションのようです。それがその方法である場合、リソース ID を指定してテーマ名を取得する方法と、テーマの名前を指定してリソース ID を取得する方法を教えてください。
テーマ名とgetResourceEntryNameを使用して、これを解決することができました。完全なコード:
public static final String PREFERENCE_THEME = "theme";
public static final int[] THEMES = {R.style.Theme_Blue, R.style.Theme_Green, R.style.Theme_Orange, R.style.Theme_Purple, R.style.Theme_Red};
private static final int DEFAULT_THEME = R.style.Theme_Green;
public int getTheme() {
final String themeName = preferences.getString(PREFERENCE_THEME, getThemeName(DEFAULT_THEME));
for (int i = 0; i < THEMES.length; i++) {
int resId = THEMES[i];
String candidateThemeName = this.getThemeName(resId);
if (themeName.equals(candidateThemeName)) {
return resId;
}
}
// The theme in preferences doesn't exist anymore
this.setTheme(DEFAULT_THEME);
return DEFAULT_THEME;
}
public void setTheme(int resId) {
final String themeName = getThemeName(resId);
Editor editor = preferences.edit();
editor.putString(PREFERENCE_THEME, themeName);
editor.commit();
}
private String getThemeName(int resId) {
return context.getResources().getResourceEntryName(resId);
}