自定义spinner
1、要呈现的spinner下拉菜单效果图如下
2、自定义下拉菜单布局--配置适配器
private fun initAdapter(spinner: Spinner, list: MutableList<String>) {
spinner.apply {
adapter =
ArrayAdapter(requireContext(), R.layout.layout_spinner_item, list)
dropDownVerticalOffset = 120
}
}
dropDownVerticalOffset 是设置下拉的项目选择窗口在垂直方向相对于Spinner窗口的偏移量
3、R.layout.layout_spinner_item.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/todo_spinner_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="5dp"
android:gravity="center_horizontal"
android:textColor="@color/color_3c3c3c"
android:textSize="12sp"
android:layout_marginVertical="2dp"
android:layout_marginHorizontal="7dp" />
4、自定义菜单高度
private fun initSpinnerHeight(spinner: Spinner) {
try {
val popup: Field = AppCompatSpinner::class.java.getDeclaredField("mPopup")
popup.isAccessible = true
// Get private mPopup member variable and try cast to ListPopupWindow
val popupWindow = popup.get(spinner) as androidx.appcompat.widget.ListPopupWindow
// Set popupWindow height to 500px
popupWindow.height = 500
} catch (e: java.lang.Exception) {
// silently fail...
e.printStackTrace()
}
}
需要注意的是mPopup这个参数,AppCompatSpinner是Spinner的子类,两者都有mPopup这个参数,所以要指定AppCompatSpinner::class.java.getDeclaredField("mPopup")获取,否则是无效的。
结束语
以上就是Spinner自定义布局和高度的解决办法,文章若出现错误,欢迎各位批评指正,文章乃原创,转载请注明出处谢谢❤。