安卓:菜单中的圆角

5
在我的MainActivity中的onCreateOptionsMenu方法中,我用四个项目填充了基本菜单(请参见menu_main.xml)。
由于DialogFragments可以拥有圆角,因此我应该如何在这个菜单上获得圆角?

正如您在屏幕截图中看到的那样,菜单出现为Activity整个顶部的溢出菜单(是的,在单击三个点时,Android提供的基本菜单)。
屏幕截图:打开菜单的MainActivity

我尝试过的
对于Dialog,我在menu_main.xml文件的菜单和项目节点上添加了android:background="@drawable/basic_rounded_corners ——>失败了(因为我不知道如何通过编程的方式设置菜单的背景Drawable,如果像DialogFragments一样甚至可能无法实现)

我想要的
我希望知道如何在我的菜单上获得圆角。

menu_main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.beagleentertain.pillreminder.MainActivity"
android:background="@drawable/basic_rounded_corners">
<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/checkable_make7dayspause"
    android:checkable="true"
    android:checked="false"
    app:showAsAction="ifRoom"
    />
<item
    android:id="@+id/about_settings"
    android:orderInCategory="100"
    android:title="@string/text_menu_about"
    app:showAsAction="ifRoom"
    />
<item
    android:id="@+id/settings_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="ifRoom"
    />
<item
    android:id="@+id/settings_share"
    android:orderInCategory="100"
    android:title="@string/action_share"
    app:showAsAction="ifRoom"
    />


如果什么都不起作用,使用弹出窗口并填充布局,并显示为下拉列表。 - Shubham AgaRwal
1个回答

5

首先,您需要在活动中添加一个工具栏,以便为popMenu设置样式。

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorPrimary"
    app:popupTheme="@style/ThemeOverlay.MyTheme"
    app:titleTextColor="#f0f0f0"/>

然后添加这个样式,确保将 colorBackground 设置为透明,以便正确显示圆角,然后使用任何可绘制的形状作为背景。
 <style name="ThemeOverlay.MyTheme" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:colorBackground">@android:color/transparent</item>
        <item name="android:textColor">#000000</item>
        <item name="android:background">@drawable/rounded</item>
    </style>

如果您想创建完全自定义的窗口,可以参考这篇文章中的教程。只需确保在根视图中添加圆形背景即可。文章链接:https://medium.com/keepsafe-engineering/building-a-custom-overflow-menu-aaa09b0b9054

app:popupTheme="@style/ThemeOverlay.MyTheme" 是一个问题。 - Vladyslav Ulianytskyi
这为每个菜单项文本和每个菜单项设置了可绘制背景,而不是整个菜单。在这种情况下,将每个文本和每个项目的四个角变圆。在你的可绘制对象中加上描边就可以看到效果了。 - Henrik Erlandsson

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