1. ホーム
  2. android

[解決済み] 参照である場合にプログラムで色の値を取得する (テーマ)

2022-04-23 17:42:52

質問

考えてみてください。

styles.xml

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

attrs.xml

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

カラー.xml

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

そこで テーマカラー はテーマから参照されています。theme_color (参照) をプログラムで取得するにはどうしたらよいでしょうか?通常であれば、私は getResources().getColor() が、今回は参照されているのでダメです!

どのように解決するのですか?

これで大丈夫です。

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

また、このコードを呼び出す前に、必ずテーマをActivityに適用してください。 どちらかを使ってください。

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

をマニフェストまたはコールで呼び出す前に)。 setContentView(int) ):

setTheme(R.style.Theme_BlueTheme)

onCreate() .

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