Copyright © Google
レイアウトファイルをincludeした際にandroid:background属性で指定した背景が消える謎
奇妙な現象に遭遇
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">
原因の究明に半日近く費やした割には、呆気なく潰せる不具合でした・・・