AutoCompleteTextView获焦弹出键盘,如何仅显示下拉菜单?
问题描述
我想让AutoCompleteTextView仅提供下拉选择功能,禁止编辑操作,且获焦时不会弹出键盘,但当前控件仍可编辑,获焦时会弹出键盘:
- 预期效果:仅展示下拉选择框,无编辑输入功能
- 实际效果:控件可编辑,获焦弹出键盘
原XML布局代码
<com.google.android.material.textfield.TextInputLayout android:id="@+id/gender_container" style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginHorizontal="20dp" android:layout_marginVertical="10dp" android:hint="Gender" app:layout_constraintTop_toBottomOf="@+id/year_of_bird_container"> <AutoCompleteTextView android:id="@+id/gender_spinner" android:layout_width="match_parent" android:inputType="none" android:layout_height="match_parent"/> </com.google.android.material.textfield.TextInputLayout>
原Fragment代码
private fun setAdapter() { val genderList = mutableListOf( Gender.MALE.toString(), Gender.FEMALE.toString(), Gender.OTHER.toString(), Gender.PREFER_NOT_TO_SAY.toString() ) val adapter = ArrayAdapter( requireContext(), R.layout.simple_spinner_dropdown_item, genderList ) binding.genderSpinner.setAdapter(adapter) }
解决方案
要实现仅下拉选择、禁止编辑的效果,可通过以下两种方式配置:
方法一:XML属性直接配置
在AutoCompleteTextView中添加属性,禁止控件获焦、保留点击功能:
<AutoCompleteTextView android:id="@+id/gender_spinner" android:layout_width="match_parent" android:layout_height="match_parent" android:inputType="none" android:focusable="false" android:focusableInTouchMode="false" android:clickable="true"/>
方法二:代码动态配置
在Fragment的setAdapter方法中添加逻辑,控制控件状态并绑定点击事件:
private fun setAdapter() { val genderList = mutableListOf( Gender.MALE.toString(), Gender.FEMALE.toString(), Gender.OTHER.toString(), Gender.PREFER_NOT_TO_SAY.toString() ) val adapter = ArrayAdapter( requireContext(), R.layout.simple_spinner_dropdown_item, genderList ) binding.genderSpinner.apply { setAdapter(adapter) // 禁止获焦,避免触发编辑状态 isFocusable = false isFocusableInTouchMode = false // 允许点击,绑定弹出下拉菜单的逻辑 isClickable = true setOnClickListener { showDropDown() } } }
补充说明
android:inputType="none"用于屏蔽软键盘弹出,但仅靠该属性无法完全禁止编辑,需配合focusable相关属性彻底禁用控件的获焦编辑能力。- 设置
clickable="true"并绑定showDropDown()点击事件,确保用户点击控件时能正常弹出下拉选项列表。
内容的提问来源于stack exchange,提问作者DoctorWho
相关产品推荐
相关产品推荐

