Android自定义Spinner设置Adapter后自定义背景消失问题
Spinner设置Adapter后自定义背景消失的解决方案
这个问题我之前也碰到过!原因通常是当你给Spinner设置自定义Adapter时,系统会默认覆盖掉Spinner的部分样式,导致你之前设置的自定义背景被隐藏了。下面给你几个可行的解决办法:
方法1:设置Adapter后重新指定背景
最简单快速的办法,就是在设置完Adapter之后,手动再给Spinner设置一次背景资源,强制覆盖掉Adapter带来的样式变更:
spinnerReferredBy.adapter = ArrayAdapter<String>(activity, R.layout.custom_spinner_item, referred) // 重新设置自定义背景 spinnerReferredBy.setBackgroundResource(R.drawable.custom_drop_down)
方法2:检查自定义Item布局是否遮挡了背景
你的custom_spinner_item布局如果设置了不透明的背景色,或者根视图的尺寸填充了整个Spinner,就会把Spinner本身的背景盖住。打开这个布局文件,确保根视图的背景是透明的:
<!-- custom_spinner_item.xml --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/transparent" <!-- 关键:设置透明背景 --> android:padding="8dp" android:textSize="16sp"/>
方法3:区分Spinner主视图和下拉菜单的布局
如果你需要自定义下拉菜单的样式,记得用setDropDownViewResource来指定下拉项的布局,不要让下拉菜单的样式影响Spinner主视图的背景:
// 创建Adapter时指定主视图item布局 val adapter = ArrayAdapter<String>(activity, R.layout.custom_spinner_item, referred) // 单独指定下拉菜单的item布局 adapter.setDropDownViewResource(R.layout.custom_spinner_dropdown_item) spinnerReferredBy.adapter = adapter // 保险起见重新设置主视图背景 spinnerReferredBy.setBackgroundResource(R.drawable.custom_drop_down)
为什么会出现这个问题?
默认情况下,使用系统默认Adapter时,Spinner会保留自身的背景样式,但当你指定了自定义item布局后,系统会认为你要完全自定义Spinner的显示逻辑,因此会重置部分样式属性,导致你之前设置的android:background被覆盖。
内容的提问来源于stack exchange,提问作者Pramod Waghmare
相关产品推荐
相关产品推荐

