「テーマスイッチャー」をプログラムで設定するのに苦労しています。アプリからテーマを (白 (Theme.Light.NoTitleBar) とダーク (Theme.Black.NoTitleBar) の間で) 切り替えたいのですが、次のようにします。SharedPreference を設定します。
final String PREFS_NAME = "MyPrefsFile";
final SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
final SharedPreferences.Editor editor = settings.edit();
そして、テーマを切り替えるための2つのボタンがあります(2番目のボタンはほぼ同じです)
Button ThemeWhite = (Button) findViewById(R.id.ThemeWhite);
ThemeWhite.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
editor.putBoolean("Theme", false);
editor.commit();
System.exit(2);
}
});
そして、各アクティビティの懇願で、SharedPreferenceをチェックします
boolean theme = settings.getBoolean("Theme", false);
if(theme){
this.setTheme(R.style.Theme_NoBarBlack);
} else{
this.setTheme(R.style.Theme_NoBar);
}
setContentView(R.layout.aplikacja);
フォルダー値のファイルstyles.xmlでテーマを定義します。
<resources>
<style name="Theme.NoBar" parent="@android:style/Theme.Light.NoTitleBar" />
<style name="Theme.NoBarBlack" parent="@android:style/Theme.NoTitleBar" />
値-v11:
<resources>
<style name="Theme.NoBar" parent="@android:style/Theme.Holo.Light.NoActionBar" />
<style name="Theme.NoBarBlack" parent="@android:style/Theme.Holo.NoActionBar" />
値-v14:
<resources>
<style name="Theme.NoBar" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar" />
<style name="Theme.NoBarBlack" parent="@android:style/Theme.DeviceDefault.NoActionBar" />
マニフェスト ファイル:
<application
...
android:theme="@style/Theme.NoBar" >
Android > 4.0ではすべてがうまく機能していますが、2.2を使用してもテーマは変わりません.フォントだけが白くなりますが、暗い背景はありません.
少なくとも機能するかどうかを確認して、値の Theme.NoBarBlack を変更し (Android <3.0 の場合)、その値を Theme.NoBar と同じに変更してから、ボタンのフォントを押しても変更されませんでした。
編集(問題が見つかりました):Android 2.2マニフェストファイルで背景と残りを設定し、プログラムでテーマを変更すると、テキストの色のみに影響することが判明しました。なぜそれが起こるのですか?
回答(私は10の評判を持っていないので): Android <3.0では、
super.onCreate(savedInstanceState);
テーマを設定する前かどうか。
したがって、次のようになります。
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme_NoBar);
super.onCreate(savedInstanceState);
setContentView(R.layout.lista);
}
何もないところから問題を作って申し訳ありませんが、3.0 以上で動作していたので混乱しました。それに半日を費やしますが、働いています。:)