Android Studio实现点击TextView弹出可滚动选择列表并回填内容
你要实现的交互有两种成熟的原生实现方案,分别适配悬浮锚定弹出、独立居中弹窗的场景,具体实现如下:
方案1:ListPopupWindow(推荐,适配点击控件附近弹出悬浮列表的需求)
该组件是Android原生提供的悬浮列表弹窗,支持锚定到指定控件、自定义宽高、列表自动滚动,完全匹配你的需求。
1. 布局中添加目标TextView
<TextView android:id="@+id/tv_selector" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="请选择内容" android:padding="16dp"/>
2. 代码中初始化弹窗逻辑
以下为Kotlin实现代码,Java写法逻辑完全一致:
// 1. 准备可选列表数据 val optionList = arrayOf("选项1", "选项2", "选项3", "选项4", "选项5", "选项6", "选项7", "选项8", "选项9", "选项10") val targetTv = findViewById<TextView>(R.id.tv_selector) // 2. 初始化ListPopupWindow val popupWindow = ListPopupWindow(this) // 绑定列表适配器,直接用系统自带的单行布局即可 popupWindow.setAdapter(ArrayAdapter(this, android.R.layout.simple_list_item_1, optionList)) // 绑定锚点控件,弹窗默认基于该控件位置弹出 popupWindow.anchorView = targetTv // 自定义弹窗宽高,固定高度后内容超出时会自动滚动,无需额外加ScrollView popupWindow.width = 400.dp2px() // 可替换为WindowManager.LayoutParams.WRAP_CONTENT自适应宽度 popupWindow.height = 500.dp2px() // 固定高度,超出自动滚动 popupWindow.isModal = true // 设置点击弹窗外部可关闭 // 3. 列表项点击事件,选中后回填到TextView popupWindow.setOnItemClickListener { _, _, position, _ -> targetTv.text = optionList[position] popupWindow.dismiss() } // 4. 给TextView加点击事件,点击弹出弹窗 targetTv.setOnClickListener { popupWindow.show() }
用到的dp转px扩展函数参考:
fun Int.dp2px(): Int { return (this * Resources.getSystem().displayMetrics.density).toInt() }
方案2:带列表的AlertDialog(独立居中弹窗场景适用)
如果需要弹窗完全脱离原控件位置,居中显示,直接使用AlertDialog的列表模式即可,代码更简洁,列表自动支持滚动:
val optionList = arrayOf("选项1", "选项2", "选项3", "选项4", "选项5", "选项6", "选项7", "选项8", "选项9", "选项10") val targetTv = findViewById<TextView>(R.id.tv_selector) targetTv.setOnClickListener { AlertDialog.Builder(this) .setTitle("请选择内容") .setItems(optionList) { dialog, position -> targetTv.text = optionList[position] dialog.dismiss() } .show() }
补充说明
- ListPopupWindow默认弹出在锚点控件下方,可通过
horizontalOffset、verticalOffset属性调整弹出位置的偏移量,也可调用show(xOffset, yOffset)方法指定弹出坐标 - 你之前查到的下拉菜单多为Spinner、ExposedDropdownMenu的默认样式,默认锚定在输入组件下方,自定义弹出位置和样式成本较高,上述两种方案更适配你的需求
内容的提问来源于stack exchange,提问作者Tritize
相关产品推荐
相关产品推荐

