将圆形彩色背景应用于材质弹出菜单组件的正确方法是什么?

qxgroojn  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(232)

我试图使一个圆角和自定义字体弹出菜单。我正在使用material.io中的材质菜单。我想做这样的事情:

到目前为止,我尝试使用popupmenu,并使用自定义背景绘图添加样式参数:
看到这个问题的答案,我使用了contextthemewrapper,这样我的样式才真正生效。如果不这样做,样式更改将无法工作

  1. private fun showAddGoalsMenu(view: View) {
  2. val wrapper = ContextThemeWrapper(context, R.style.PopupMenu)
  3. val popupMenu = PopupMenu(wrapper, view)
  4. popupMenu.inflate(R.menu.menu_add_goals)
  5. ...
  6. }

从material.io菜单主题示例中,我尝试设置属性 popupMenuBackground 在主应用程序样式中,也尝试了设置 android:popupBackground 以个人风格。但背景并不适用:

从其他答案(问题1、问题2、问题3)中,我发现了其他属性,如 background , android:background , itemBackground , android:itemBackground . 由此,, backgroundandroid:background 只适合设置颜色。如果我将自定义绘图设置为“背景”,则也会将项目弄乱:
itemBackgroundandroid:itemBackground 仅为单个项目设置背景。因此,如果我应用圆形背景,结果如下所示:

我的样式代码当前看起来像这样。根据我到目前为止所读到的,这应该是可行的。但是唉。我已经把我做的所有实验都注解掉了。

  1. <style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
  2. <!-- Customize your theme here. -->
  3. <item name="colorPrimary">@color/colorPrimary</item>
  4. <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
  5. <item name="colorSecondary">@color/colorSecondary</item>
  6. <item name="colorAccent">@color/colorAccent</item>
  7. <item name="bottomNavigationStyle">@style/Widget.App.BottomNavigationView</item>
  8. <!--<item name="textAppearanceLargePopupMenu">@style/TextAppearance.App.Subtitle1</item>-->
  9. <!--<item name="textAppearanceSmallPopupMenu">@style/TextAppearance.App.Subtitle1</item>-->
  10. <!--<item name="popupMenuBackground">@drawable/custom_popup_background</item>-->
  11. <item name="popupMenuStyle">@style/PopupMenu</item>
  12. </style>
  13. <style name="PopupMenu" parent="Widget.MaterialComponents.PopupMenu">
  14. <item name="android:dropDownHorizontalOffset">-4dp</item>
  15. <item name="android:dropDownVerticalOffset">4dp</item>
  16. <item name="android:popupBackground">@drawable/custom_popup_background</item>
  17. <!--<item name="android:itemBackground">@drawable/black_popup_background</item>-->
  18. <item name="popupMenuBackground">@drawable/custom_popup_background</item>
  19. <!--<item name="background">@color/colorPrimary</item>-->
  20. <!--<item name="android:background">@drawable/custom_popup_background</item>-->
  21. <item name="android:background">@color/colorPrimary</item>-->
  22. <!-- <item name="itemBackground">@drawable/black_popup_background</item>-->
  23. <item name="textAppearanceLargePopupMenu">@style/TextAppearance.App.Subtitle1</item>
  24. <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.App.Subtitle1</item>
  25. </style>
  26. <style name="TextAppearance.App.Subtitle1" parent="TextAppearance.MaterialComponents.Subtitle1">
  27. <item name="fontFamily">@font/amaranth</item>
  28. <item name="android:fontFamily">@font/amaranth</item>
  29. <item name="android:textColor">#1E2D58</item>
  30. </style>

这是我的定制背景画

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android">
  3. <solid android:color="@color/colorPrimary"/>
  4. <corners
  5. android:radius="16dp"/>
  6. <padding
  7. android:bottom="8dp"
  8. android:top="8dp"/>
  9. </shape>

为了测试itembackground,我创建了一个黑色的\u弹出窗口\u background.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android">
  3. <solid android:color="@color/colorSecondary"/>
  4. <corners
  5. android:radius="16dp"/>
  6. <padding
  7. android:bottom="8dp"
  8. android:top="8dp"/>
  9. </shape>

我得到的结果是:

我不知道我做错了什么。提前谢谢大家的帮助!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题