ビューのボーダーをそのままに背景色だけを変更したいんですが、setBackgroundColorでは 設定されている Darawable の枠線が消滅してしまいます。

実現したいこと

android:background 属性に、自作の drawable を設定している ビューがあります。
この、ビューに対し
drawable で定義されている「背景色以外」の属性は保持しつつ
背景色だけを変更したいです。

よろしくお願いいたします。

前提

■スキル
私および周りのAndroid / java の組込み経験は、かなり浅いです。
他環境の組込み経験はそれなりに有ります。
前回投稿より数か月経てますのでその分の成長はあるかとは思われます。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

setBackgroundColorでは 設定されている Darawable の
各属性(枠線、角丸など)が消滅してしまいます。

静的な、レイアウト.xml の android:backgroundTint への指定
動的な、getBackground().setTint() では
角丸は生き残るものの、枠線は消滅します。

getBackground() で Drawable を取得しても Drawable自体に setColor は無く
ColorDrawble や GradientDrawable へキャスト後に setColor してみましたが
背景色以外の属性は保たれるものの、
他の同様のすべてのビューがこの設定した背景色に変わってしまいます。
(GradientDrawable は画面切り替えまで反応せず・・)

ColorListを取得して index 0 に設定するなどしてみたのですが、やはり
他のビュー全部の背景色が変わってしまい、使い方が全く分かりません。
(一応ググっていくつかweb記事は見ているのですが、複雑すぎて理解不能というか・・)

もう数か月も前から、この問題にぶち当たっており、
背景色が異なるだけの Drawable を、必要な色の種類分用意し、setBackground で
Drawableごと変えるという方法で現在は実装しています。

しかし、これではリソースが増えすぎますし
こんな頭の悪い実装は一般的にしないと思うんです。
私も他言語であれば、当然ですがこんな実装はしません・・

何か他のアプローチをご教授いただけたら幸いです。
よろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

【環境】
Chipmunk (2021.2.1 パッチ2)
java
compileSdk 32
minSdk 32
targetSdk 32
Android Gradle プラグインバージョン 7.2.2
Gradleバージョン 7.3.3

コメントを投稿

0 コメント