更改暴露下拉菜单的背景颜色

11
我认为安卓开发者在开玩笑。首先,他们从Material Design中删除了真正的下拉菜单,其次,它似乎无法样式化。看看这张图片。它看起来非常好几乎!我没有找到更改下拉列表背景颜色的可能性。我可以样式化列表中的每个项目,但仍然会在列表顶部和底部留下“圆角区域”的白色。

enter image description here

请问有人知道如何仅更改列表的背景颜色吗?

确实有一种方法可以更改它(来自这里),通过应用:

 <style name="AppTheme.ExposedDropdownMenu" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu">
    <item name="materialThemeOverlay">@style/AppTheme.ExposedDropdownMenu.MaterialThemeOverlay</item>
 </style>


 <style name="AppTheme.ExposedDropdownMenu.MaterialThemeOverlay" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- background color of dropdown (popup) items -->
    <item name="colorSurface">#444444</item>
 </style>

但是这会改变EditText的填充、颜色和填充。它还完全删除了菜单的高程,我无法恢复它。
难道只改变此菜单的背景颜色就这么困难吗?为什么这个API如此混乱。
后续问题:有人知道如何使TextView compund drawable圆形(在EditText内部)吗?

你找到解决方案了吗?我现在正在寻找它! - F.Mysir
1
嗨,从您发布的链接来看,它按预期工作。只需完全复制粘贴所有代码!根据您的需要更改值即可!如果您遵循文章,我相信您会找到解决方案的。请粘贴所有代码,而不是其中一部分! - F.Mysir
1
为了给弹出窗口添加高程,请在以下位置添加此代码:<style name="AppTheme.ExposedDropdownMenu.MaterialThemeOverlay" parent="Theme.MaterialComponents.DayNight.DarkActionBar">内部添加 <item name="android:popupElevation">8dp</item> - F.Mysir
你能分享源代码吗? - azizbekian
4个回答

0
<style name="changeBackgroundColor"  parent="Widget.MaterialComponents.TextInputLayout.Outline   dBox.Dense">
<item name="colorSurface">@color/yourColor</item>
</style>

然后,在TextInputLayout内的.xml布局中包含此主题。例如:

android:theme="@style/changeBackgroundColor" 

0
在编程中,将此行代码“8dp”添加到弹出窗口的样式中以实现高度提升。
 <style name="AppTheme.ExposedDropdownMenu.MaterialThemeOverlay" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- background color of dropdown (popup) items -->
        <item name="colorSurface">@4f4f4f</item>
        <item name="android:popupElevation">8dp</item>
    </style>
    

在主样式中使用此样式,例如:

<style name="dropdown" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu">
<!-- The color of the label when it is collapsed and the text field is active -->
<item name="colorControlActivated">@color/colorFFB44C</item>
<item name="materialThemeOverlay">@style/AppTheme.ExposedDropdownMenu.MaterialThemeOverlay</item>
</style>

0
下拉菜单中的项目是在下拉菜单元素本身之外呈现的,它们是在外部表面上呈现的。这就是为什么更改这些元素的属性不起作用的原因。这也是为什么更改colorSurface主题值有效的原因。

0

关于这个的很酷的文章:https://medium.com/itnext/styling-material-exposed-dropdown-menus-on-android-19c7d21a9fcc

简而言之:

  1. 创建背景的可绘制对象(例如dropdown_background.xml)

     <shape xmlns:android="http://schemas.android.com/apk/res/android">
     <solid android:color="@color/your_color" />
     <corners android:radius="16dp" />
    
  2. 在AutoCompleteTextView中设置:

    android:dropDownSelector="@drawable/dropdown_background"

  3. 在你的fragment的onViewCreated方法中将背景设置为你的AutoCompleteTextView,类似于这样:

     binding.YOUR_AutoCompleteTextView_ID.apply {
     setDropDownBackgroundDrawable(
         ResourcesCompat.getDrawable(
             resources,
             R.drawable.language_dropdown_bg,
             null
         )
     )
     setAdapter(adapter)
    

    }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接