参照(テーマ)の場合にプログラムで色の値を取得する 質問する

参照(テーマ)の場合にプログラムで色の値を取得する 質問する

このことを考慮:

スタイル.xml

<style name="BlueTheme" parent="@android:style/Theme.Black.NoTitleBar">
    <item name="theme_color">@color/theme_color_blue</item>
</style>

属性.xml

<attr name="theme_color" format="reference" />

カラー.xml

<color name="theme_color_blue">#ff0071d3</color>

だからテーマカラーテーマによって参照されます。 theme_color (参照) をプログラムで取得するにはどうすればいいでしょうか? 通常は を使用しますgetResources().getColor()が、この場合は参照されているため使用しません。

ベストアンサー1

これで問題は解決するはずです:

TypedValue typedValue = new TypedValue();
Theme theme = context.getTheme();
theme.resolveAttribute(R.attr.theme_color, typedValue, true);
@ColorInt int color = typedValue.data;

また、このコードを呼び出す前に、必ずアクティビティにテーマを適用してください。次のいずれかを使用します。

android:theme="@style/Theme.BlueTheme"

マニフェストまたは呼び出しで ( を呼び出す前にsetContentView(int)) 次のように記述します。

setTheme(R.style.Theme_BlueTheme)

onCreate()

あなたの値でテストしたところ、完璧に動作しました。

おすすめ記事