web-dev-qa-db-ja.com

プログラムでアプリケーション全体のテーマを切り替えますか?

ユーザーが選択したテーマを取得しようとしていますが、イライラするほど近づいているように感じます。 AndroidManifest.xmlでテーマを定義することは本来どおりに機能しますが、アプリの設定に基づいて変更することはできません(わかります)。

<application 
    Android:theme="@style/theme_sunshine" 
    Android:icon="@drawable/icon" 
    Android:label="@string/app_name">

または、各アクティビティで動的に設定することもできます:

someChosenTheme = PreferenceManager.getDefaultSharedPreferences(this).getString("themePreference", "theme_twilight");
setTheme(someOtherChosenTheme);

しかし、それは面倒であるように思われ、私はむしろ一箇所でアプリ全体のテーマを設定したいと思います。私の最初の考えは、メインアクティビティが起動したらすぐにアプリケーションコンテキストを取得し、そこで実行することでした。

getApplicationContext().setTheme(R.style.theme_dummy);

私が知る限り、 this はトリックを行うべきですが、実際には何もしていません-アプリ全体にデフォルトのAndroidスタイルがあります。上記は有効ですか? 、もしそうなら、私は何か他の愚かなことをしているかもしれませんか?

それが重要な場合は、APIレベル3で作業しています。正しい方向の製品は大歓迎です!

関連する質問

38
Cheezmeister

アプリの基本アクティビティを作成し、onCreateをオーバーライドしてテーマを設定します。この基本アクティビティから他のすべてのアクティビティを取得します。

このチュートリアルも確認してください: http://www.androidengineer.com/2010/06/using-themes-in-Android-applications.html

31
peter3

これには良い解決策があるかもしれませんが、それを見つけることができなかったので、Activityを受け取り、基本的にあなたが書いたこれらの2行を実行するヘルパークラスで静的なヘルパーメソッドを作成しました。もちろん、それは完全ではありませんが、私のアプリのすべてのonCreate()メソッドに1行の短いコードを追加するだけで十分でした。

5
EboMike