Android:Material 大纲下拉菜单的样式问题

Android: Issues Styling a Material Outlined Dropdown Menu

我用 com.google.android.material.textfield.TextInputLayout 包装了 com.google.android.material.textfield.MaterialAutoCompleteTextView,我设法让它看起来几乎像一个 Material 轮廓下拉菜单。现在我在右上角的标签上看到一个奇怪的背景,在下拉菜单的顶部和底部看到额外的黑色 space,我似乎无法摆脱它。

[![在此处输入图片描述][1]][1]

 <com.google.android.material.textfield.TextInputLayout
                    android:id="@+id/dropdown1"
                    style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
                    app:layout_constraintTop_toTopOf="parent"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:boxStrokeColor="@color/plum"
                    android:textColorHint="@color/slate_3"
                    android:background="@color/white"
                    app:boxBackgroundColor="@color/white"
                    app:endIconTint="@color/plum"
                    android:hint="@string/asset_type"
                    app:theme="@style/Theme.MaterialComponents">
    
                    <com.google.android.material.textfield.MaterialAutoCompleteTextView
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:inputType="none"
                        android:textColor="@color/slate_4"
                        android:padding="@dimen/margin_padding_medium"
                        app:theme="@style/Theme.MaterialComponents"/>
                </com.google.android.material.textfield.TextInputLayout>





var textField = findViewById<TextInputLayout>(R.id.dropdown1)
        val items = listOf("Option 1", "Option 2", "Option 3", "Option 4")
        val adapter = ArrayAdapter(this, R.layout.dropdown_list_item, items)
        (textField.editText as? MaterialAutoCompleteTextView)?.setAdapter(adapter)




<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:maxLines="1"
    android:textSize="@dimen/text_size_large"
    android:textColor="@color/black"
    android:background="@color/white"
    android:padding="@dimen/margin_padding_medium"/>

[更新 1]

我能够通过在 AutoCompleteTextView 上设置可绘制背景来移除下拉菜单顶部和底部的黑条:

(textField.editText as? AutoCompleteTextView)?.setDropDownBackgroundDrawable( getDrawable(R.drawable.outlined_dropdown_bkgrd))

不过我仍然看到左上角标签上的灰色背景。


[更新 2:2021 年 3 月 25 日]

快到了....

下面@Martin Zeitler 的回答让我明白我需要在我的清单中的 activity 定义中设置一个基于 Material 的主题,因为 app:theme=" @style/Theme.MaterialComponents”导致了问题。我无法将基于 Material 的主题设置到我的整个应用程序,因为它可能会导致遗留代码出现问题。因此,我在样式资源中使用了主题来设置 TextInputLayout 和 AutoCompleteTextView 的所有样式:

<com.google.android.material.textfield.TextInputLayout
                android:id="@+id/dropdown1"
                style="@style/SecondaryTheme.TextInputLayout.ExposedDropdownMenu"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:theme="@style/SecondaryTheme.TextInputLayoutTheme.ExposedDropdownMenu"
                app:layout_constraintTop_toTopOf="parent">

                <AutoCompleteTextView
                    android:id="@+id/autocomplete_performance"
                    style="@style/SecondaryTheme.EditText"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="This is the hintv5"
                    android:popupTheme="@style/SecondaryTheme.DropDownStyle"
                    android:singleLine="true"
                    android:inputType="none"/>
            </com.google.android.material.textfield.TextInputLayout>

可能会移除app:theme="@style/Theme.MaterialComponents"(为了看看它是否会干扰)并尝试另一种样式(或者只是自定义当前样式);这些基本样式已普遍可用:

Widget.MaterialComponents.TextInputLayout.FilledBox.ExposedDropdownMenu
Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu
Widget.MaterialComponents.TextInputLayout.FilledBox.Dense.ExposedDropdownMenu
Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense.ExposedDropdownMenu

styles.xml 中是:

parent="Widget.MaterialComponents.TextInputLayout.*.ExposedDropdownMenu"

有关示例,请参阅第 Implementing exposed dropdown menu theming 章。那里还写着:

... you don't need to specify a style tag on the AutoCompleteTextView.