Android Kotlin:如何限制SearchView的输入文本长度?
在Kotlin中给SearchView设置6位输入长度限制
直接给SearchView设置InputFilter不会生效,因为SearchView是复合控件,实际接收输入的是它内部的SearchAutoComplete子组件。必须找到这个子组件才能设置长度过滤。
解决步骤
- 通过系统资源ID定位SearchView内部的
SearchAutoComplete - 给该组件设置
LengthFilter(6)限制输入长度
修改后的完整代码
searchViewFiyatInput = binding.fiyatInputEditText // 获取SearchView内部的输入框组件 val searchAutoCompleteId = searchViewFiyatInput.resources.getIdentifier("android:id/search_src_text", null, null) val searchAutoComplete = searchViewFiyatInput.findViewById<SearchAutoComplete>(searchAutoCompleteId) // 设置最大输入长度为6位 searchAutoComplete?.filters = arrayOf(InputFilter.LengthFilter(6)) // 原有监听器逻辑保持不变 searchViewFiyatInput.setOnQueryTextListener(object : androidx.appcompat.widget.SearchView.OnQueryTextListener{ override fun onQueryTextSubmit(query: String?): Boolean { query?.let { try { binding.elmasText.text = (query.toDouble()*2.63).toInt().toString() binding.elmasTextOnImage.text = (query.toDouble()*2.63).toInt().toString() binding.fiyatOnImage.text = query.toInt().toString() } catch (e: Exception){ binding.elmasText.text = "" binding.elmasTextOnImage.text = "" binding.fiyatOnImage.text = "" } } return true } override fun onQueryTextChange(newText: String?): Boolean { newText?.let { try { binding.elmasText.text = (newText.toDouble()*2.63).toInt().toString() binding.elmasTextOnImage.text = (newText.toDouble()*2.63).toInt().toString() binding.fiyatOnImage.text = newText.toInt().toString() } catch (e: Exception){ binding.elmasText.text = "" binding.elmasTextOnImage.text = "" binding.fiyatOnImage.text = "" } } return true } })
原理说明
SearchView的输入区域由内部的SearchAutoComplete(继承自AutoCompleteTextView)实现,直接操作SearchView本身无法将过滤规则应用到实际输入控件上。通过系统资源IDandroid:id/search_src_text可以精准定位到这个子组件,进而设置输入长度限制。
内容的提问来源于stack exchange,提问作者Sezai
相关产品推荐
相关产品推荐

