You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 10:50:36