如何通过代码隐藏AutoCompleteTextView的下拉箭头并切换输入模式
TextInputLayout+AutoCompleteTextView 普通输入/下拉补全模式切换方案
基于你当前使用的组件结构,无需新增嵌套视图,直接通过修改组件属性即可实现两种状态的无缝切换,具体实现逻辑如下:
前置配置
先在XML布局中给TextInputLayout设置app:endIconMode="none",不使用内置的末尾图标绑定逻辑,改为代码动态控制,避免内置逻辑干扰自定义切换。
普通输入模式(常态)配置
切换到该模式时执行以下代码即可完全模拟普通EditText的行为:
- 把自动补全触发阈值设为最大值,正常输入不会触发补全匹配:
autoCompleteTextView.setThreshold(Integer.MAX_VALUE); - 将下拉菜单高度设为0,就算意外触发也不会弹出菜单:
autoCompleteTextView.setDropDownHeight(0); - 移除末尾图标和对应的点击监听,完全杜绝点击触发下拉的可能:
textInputLayout.setEndIconDrawable(null); textInputLayout.setEndIconOnClickListener(null); - 可选:如果需要禁用输入法联想提示,追加以下配置:
autoCompleteTextView.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
自动补全下拉模式配置
切换到该模式时执行以下代码即可恢复带暴露下拉菜单的自动补全能力:
- 重置补全触发阈值为你需要的数值(例:输入1个字符就触发补全):
autoCompleteTextView.setThreshold(1); - 恢复下拉菜单高度为自适应或者固定值:
autoCompleteTextView.setDropDownHeight(ViewGroup.LayoutParams.WRAP_CONTENT); - 设置末尾下拉图标,同时绑定点击弹出下拉的逻辑:
textInputLayout.setEndIconDrawable(R.drawable.ic_baseline_arrow_drop_down_24); textInputLayout.setEndIconOnClickListener(v -> autoCompleteTextView.showDropDown()); - 可选:如果之前设置了禁用输入法联想,恢复正常输入类型即可。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

