是否可以使用微调器实现“暴露的下拉菜单”

时间:2019-06-17 15:00:03

标签: android material-design android-view

材料设计具有通过AutoCompleteTextView实现的“暴露的下拉菜单”,如下所示:

<com.google.android.material.textfield.TextInputLayout
    style="@style/Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/hint_text">

  <AutoCompleteTextView
      android:id="@+id/filled_exposed_dropdown"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

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

但是我需要具有相同的外观,但具有微调功能(没有自动完成功能,仅显示弹出窗口并选择一个项目)。

我禁用了对AutoCompleteTextView的编辑以避免使用自动完成功能,但是在选择了一项后,自动完成功能仅列出了与所选项目文本匹配的项目,并给出了在此视图中使用的过滤器。这是代码:

        <AutoCompleteTextView
                android:id="@+id/filled_exposed_dropdown"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_margin="16dp"
                **android:editable="false"**/>

此外,当我单击它时,我会放置一个侦听器以打开项目列表

        val editTextFilledExposedDropdown = findViewById<AutoCompleteTextView>(R.id.filled_exposed_dropdown)
        editTextFilledExposedDropdown.setAdapter(adapter)
        editTextFilledExposedDropdown.setOnClickListener {
            (it as AutoCompleteTextView).showDropDown()
        }

所以,我想知道是否有可能通过微调器实现这一点

enter image description here

这是我使用微调器的尝试,但是它无法正确显示样式OutlinedBox.Dense.ExposedDropdownMenu,并且还显示两个箭头底部图标,我认为一个用于样式,另一个用于微调器。

这是微调器的代码:

<com.google.android.material.textfield.TextInputLayout
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Hint">
    <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

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


<com.google.android.material.textfield.TextInputLayout
        android:id="@+id/layout_id"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Currency">
    <androidx.appcompat.widget.AppCompatSpinner
            android:id="@+id/my_spinner"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>

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

4 个答案:

答案 0 :(得分:1)

您可以在android:inputType="none"上使用AutoCompleteTextView

答案 1 :(得分:0)

如何创建PopupMenu而不是AutoCompleteTextView 这是一个如何在android中创建菜单的示例:

    Context wrapper = new ContextThemeWrapper(getContext(), R.style.popupMenuStyle);
//yourView is the view that you want to display the menu above it.
                PopupMenu popupMenu = new PopupMenu(wrapper, yourView);
                popupMenu.getMenuInflater().inflate(R.menu.menu, popupMenu.getMenu());
                popupMenu.setOnMenuItemClickListener(item -> {
                    switch (item.getItemId()) {
                        case R.id.delete:
                            //delete
                            break;
                        case R.id.edit:
                            //edit
                            break;
                    }
                    popupMenu.dismiss();
                    return true;
                });
                popupMenu.show();
菜单文件夹中的

menu.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/edit"
        android:title="@string/edit">

    </item>
    <item
        android:id="@+id/delete"
        android:title="@string/delete">
    </item>
</menu>

答案 2 :(得分:0)

这就是我想要的,只是通过重写getFilter方法禁用AutoCompleteTextView的自动完成功能。  答案发布在这里(AutoCompleteTextView - disable filtering

答案 3 :(得分:0)

更新:

可以用1行代码实现:

android:editable="false" 

AutoCompleteTextView

来自material.io文档:

  

注意:为了使菜单的版本不可编辑,您需要   应该禁用AutoCompleteTextView中的用户输入。那可以是   通过将android:editable =“ false”设置为   AutoCompleteTextView。

不知道Google为什么为此选择使用不推荐使用的属性...

tools:ignore="Deprecated"可以用来删除警告