2017-02-01 6 views
2

現在のテーマからではなく、テーマからデフォルト値を抽出する必要があります。参照IDでテーマを取得する方法

私は私はこのような現在のテーマから属性を取得得ることができることを知っている:私はのみを抽出する必要が ...

Theme darkTheme = getTheme(R.style.AppTheme.Dark); 

TypedValue typedValue = new TypedValue(); 
Theme currentTheme = context.getTheme(); 
currentTheme.resolveAttribute(android.R.attr.windowBackground, typedValue, true); 
// result is in: typedValue.data 

が、私のようなものを必要とします私は現在のテーマを変更したくありません。

+1

'テーマdarkTheme =新しいContextThemeWrapper(getBaseContext()、R.style.AppTheme.Dark).getTheme()のようなもの;'。ちょっと丸見えですが、 'Theme'を直接インスタンス化する方法があるかどうかはわかりません。私は掘り起こす必要があります。 –

+0

今のところそれを試してみると、有望に見えます –

+0

私にはうまく働きます。答えに入れると、私はそれを受け入れるでしょう。 –

答えて

4

私は任意の利用可能Contextがどうなると考えているもののラッパーが与えられたテーマに存在するすべての属性値を交換する必要がありますよう私たちは、私たちのベースContext周りの希望をテーマに、一時的なContextThemeWrapperを作成することによってこれを行うことができますように見えます。次のように

Theme darkTheme = new ContextThemeWrapper(getBaseContext(), R.style.AppTheme_Dark).getTheme(); 

別のオプションです。これは、ThemeContextへの参照を保持していないかのように見えるため、望ましいかもしれません。たぶん

Theme darkTheme = getResources().newTheme(); 
darkTheme.applyStyle(R.style.AppTheme_Dark, true); 
+0

私の場合は動作しますが、キャッシュイメージを作成するためにアクティビティの最後に使用しています。あなたがその活動を続けている場合、それが活動に悪影響を及ぼすかどうかはわかりません。 –

+1

別の方法で発見されました。正当な理由がないのに、「コンテキスト」を投げているわけではないので、この方が少し良いかもしれないと思います。 –

+1

クール、2番目のオプションも同様に動作します。 –

関連する問題