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禁」