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
.
我用 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
.