Androidアプリ開発:リソースIDを文字列から
テーマの変更を動的にやりたかった。 テーマはPreferenceでListPreferenceを使用して、ユーザーに選択してもらう。 選択したテーマを元に動的に変更する。
配列は以下の感じ。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="theme_array">
<item>白</item>
<item>黒</item>
<item>赤</item>
</string-array>
<array name="theme_array_values">
<item>Theme.Light</item>
<item>Theme.Dark</item>
<item>Theme.Red</item>
</array>
</resources>
Preferenceは以下の感じ。
<ListPreference
android:defaultValue="Theme.Light"
android:dialogTitle="テーマ選択"
android:entries="@array/theme_array"
android:entryValues="@array/theme_array_values"
android:key="theme_setting"
android:summary="ツールバーや背景の色を変更する"
android:title="テーマの変更"/>
テーマ変更はsetThemeを使えばいいのだが、リソースIDをどう取得すればいいのかわからなかった。 条件分枝しなければならないのかと思ったら簡単な方法があった。 getIdentifierを使えば、文字列からリソースIDを取得できる。
String theme_setting = sharedPreferences.getString("theme_setting", "Theme.Light");”;
Resources res = getResources();
int viewId = res.getIdentifier(theme_setting, "style", getPackageName());
setTheme(viewId);
上記をActivityごとにやる。
アピール
イククル「18禁」