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

Kotlin中TextInputLayout下拉菜单失效问题求助

问题解决:Material Design Exposed Dropdown Menu 无法正常工作

你的问题核心出在XML布局的结构与样式配置错误,以下是具体修正方案:

1. 修正XML布局结构与样式

Material Design的Exposed Dropdown Menu要求AutoCompleteTextView必须作为TextInputLayout的直接子View,且正确的样式需应用在TextInputLayout上,而非AutoCompleteTextView。修正后的XML代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
        android:hint="@string/select">

        <AutoCompleteTextView
            android:id="@+id/auto_complete_txt"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="none"
            style="@style/Widget.MaterialComponents.AutoCompleteTextView.OutlinedExposedDropdownMenu"/>

    </com.google.android.material.textfield.TextInputLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

关键修正点:

  • 将AutoCompleteTextView嵌套进TextInputLayout内部,符合组件层级要求
  • 把@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu样式移到TextInputLayout上
  • 给AutoCompleteTextView匹配对应的OutlinedExposedDropdownMenu样式,保证视觉一致性
  • 将提示文本android:hint设置在TextInputLayout上,遵循Material Design规范

2. 优化Kotlin代码(可选)

你的Kotlin逻辑基本正常,可补充选中事件监听完善交互:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val autocompleteTextView = view.findViewById<AutoCompleteTextView>(R.id.auto_complete_txt)
    val items = arrayOf("Test","Test1","Test2","Test3","Test4","Test5","Test6")
    val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_list_item_1, items)
    autocompleteTextView.setAdapter(adapter)
    
    // 可选:添加选中事件响应
    autocompleteTextView.setOnItemClickListener { parent, _, position, _ ->
        val selectedItem = parent.getItemAtPosition(position).toString()
        // 这里处理选中后的逻辑,比如弹窗提示
        Toast.makeText(requireContext(), "选中:$selectedItem", Toast.LENGTH_SHORT).show()
    }
}

3. 额外检查项

  • 确认项目已引入Material Components依赖(Module级build.gradle):
implementation 'com.google.android.material:material:1.9.0' // 可替换为最新版本
  • 确保你的页面组件继承自AndroidX库(如AppCompatActivity、Fragment)

内容的提问来源于stack exchange,提问作者armxsp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:25:17