材料设计具有通过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()
}
所以,我想知道是否有可能通过微调器实现这一点
这是我使用微调器的尝试,但是它无法正确显示样式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>
答案 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"
可以用来删除警告