2016-09-05 8 views
1

私は1つのテーマだけを使ってアプリを作ったが、今は実行中にユーザーがそれを変更できるようにしたい。いくつかのレイアウト要素は特定の色を使って色付けする必要があるので、私のlayout.xmlにはandroid:background="@color/colorBackground"などの所有権があります。layout.xml内から現在のアプリケーションテーマの色を取得する方法は?

現在、colors.xmlの中にカラーパレットを作っています。これは次のようになります。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="colorPrimary">#607D8B</color> 
    <color name="colorPrimaryDark">#455A64</color> 
    <color name="colorAccent">#FF9800</color> 
    <color name="colorBackground">#FAFAFA</color> 
    <color name="colorTextSubtitle">#F0F0F0</color> 
    <color name="colorTextSubtitleBackground">#AA000000</color> 
</resources> 

ただし、この方法では1つのテーマしか設定できません。色をテーマスタイルの一部にするようなことを考えていました(すべてのテーマが同じ色のアイテムを持ちますが、値は異なります)。

私のレイアウトファイルがアプリケーションの現在のテーマを検出し、そこからその色の名前を取得するにはどうすればよいですか?だからandroid:background="[currentTheme.colorBackground]"のように私は複数のスタイルを持つことができますし、それらの間で変更します。

onCreate()メソッドをオーバーライドするときに、テーマを共有プレフィックスなどに置き換えて色をプログラム的に変更することを考えましたが、それはあまりにも複雑に思われ、簡単な方法が必要だと思いました。しかし、私はソートのオンラインで何かを見つけることができません。

+0

あなたがオンライン何かを見つけることができませんか?私は実行時にテーマを動的に変更する方法に関するチュートリアルを見てきたことは知っています –

答えて

0

android:background = "?android:colorPrimary"

0

amitairosあなたは、標準のカラーパレットを使用するようにレイアウトのスタイルを設定することができますどのように指摘している間、あなたは異なるテーマで複数のカラーパレットを持っているときに、プログラムのテーマを切り替えることができるか尋ねました。 OnCreate関数でプログラム活動テーマを設定し

activity.setTheme(R.style.FirstTheme);

しかし、それは私の言葉を取ることはありません。別のSOが答えるください:https://stackoverflow.com/a/18301723/1738090

関連資料: https://chris.banes.me/2014/11/12/theme-vs-style/ https://developer.android.com/guide/topics/ui/themes.html

関連する問題