5

「テーマスイッチャー」をプログラムで設定するのに苦労しています。アプリからテーマを (白 (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 以上で動作していたので混乱しました。それに半日を費やしますが、働いています。:)

4

1 に答える 1

3

あなたの styles.xml に誤りがあります: に対してTheme.NoBarBlack、親を に設定しました@android:style/Theme.NoActionBarが、存在しません。

私はあなたが意味すると思います@android:style:Theme.NoTitleBar

于 2012-10-06T21:48:42.277 に答える