Razl-Dazl

eyecatch
Copyright © Google

レイアウトファイルをincludeした際にandroid:background属性で指定した背景が消える謎

Posted at — 2024-01-28

奇妙な現象に遭遇

Viewに対してandroid:background属性でdrawableファイルを指定すると、それをViewの背景として使用する事が出来ます・・・が、別のレイアウトファイルからincludeした際に背景が消えてしまうことがあります

 <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/fields"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/background_stroke_1dp">

このように定義した背景がincludeするとおかしくなる・・・

原因としてはandroid:backgroundTint属性のオーバーライドが考えられます

backgroundTintに色を指定すると、背景のdrawableの概形を維持したまま色だけを変更することが出来ます(例えば、backgroundに星形のdrawableを指定してbackgroundTintに黄色を指定すれば、そのViewの背景は黄色の星形になるわけです)

backgroundTintを指定しなかった場合は、drawbleで定義したものがそのまま背景として使用されますが、外部でテーマを定義した場合等においてはその定義値によってオーバーライドされてしまいます

色の指定で透明度100%の値をぶち込めば背景は消えてしまいます・・・今回は、includeしたレイアウトファイルにてbackgroundTintが透明色でオーバーライドされていたようです

これを防ぐには、backgruondTintにnullをセットすればok

 <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/fields"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/background_stroke_1dp"
            android:backgroundTint="@null">

原因の究明に半日近く費やした割には、呆気なく潰せる不具合でした・・・

Author@zakuro

Mastodon: 396@vivaldi.net