自定义spinner

303 阅读1分钟

自定义spinner

1、要呈现的spinner下拉菜单效果图如下

image.png

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自定义布局和高度的解决办法,文章若出现错误,欢迎各位批评指正,文章乃原创,转载请注明出处谢谢❤。