【问题标题】:ContextMenu position is messed up in Android 7ContextMenu 位置在 Android 7 中被搞砸了
【发布时间】:2016-11-29 13:52:19
【问题描述】:

我有一个应用程序,其中包含一个简单的列表视图和上下文菜单。 在 android 7 之前,一切正常:

单击列表底部的项目时:

单击列表顶部的项目时:

但是对于 android 7...

单击列表底部的项目时:

单击列表顶部的项目时:

上下文菜单的位置有变化吗?

【问题讨论】:

  • 看起来像一个操作系统错误。设置>关于手机下“版本号”的值是多少?
  • 如何显示这个上下文菜单?能发一下代码吗?
  • 欢迎来到安卓!

标签: android contextmenu android-7.0-nougat


【解决方案1】:

我在某个地方找到了解决方案(不记得在哪里)。 问题出在新的上下文菜单和 Holo 主题之间。

解决方案详情:

我在 values-v24 文件夹中添加了一个样式,如下所示:

<resources>

<style name="ContextPopupMenuStyleLight" parent="@android:style/Widget.Holo.Light.PopupMenu">
    <item name="android:overlapAnchor">true</item>
</style>

<style name="ContextPopupMenuStyleDark" parent="@android:style/Widget.Holo.PopupMenu">
    <item name="android:overlapAnchor">true</item>
</style>

<style name="AppTheme" parent="AppTheme.Common" >
    <item name="android:contextPopupMenuStyle">@style/ContextPopupMenuStyleLight</item>
</style>

然后,在我的默认 style.xml 中,我使用了一种名为

的样式
AppTheme.Common

这定义了我所有的应用样式,以及一个名为

的空样式
<style name="AppTheme" parent="AppTheme.Common" />

我使用那个空样式作为默认的应用程序样式。 这样,在版本 > 24 上,应用程序使用这个关于上下文菜单重叠锚的额外项目来解决问题(将上下文菜单带入 API 24 之前的样子)

【讨论】:

    【解决方案2】:

    如果还有人遇到同样的问题, 只需将其添加到您的主题文件夹 (v14)

    <item name="android:overlapAnchor">true</item>
    

    【讨论】:

    • 我刚刚将它添加到我的风格中,并且一切正常,谢谢。我在 Android Studio 中遇到错误“android:overlapAnchor requires API level 21 (current min is 19)”。我不想为 24 岁以上的每个 api 创建多个样式文件夹。是否可以有一个资源文件适用于某个级别以上的所有 api?
    • 当前最小?你的意思是 minSdkVersion?
    • 是的,我的意思是 minSdkVersion。该错误不会导致任何构建错误,并且较低级别的版本没有原始问题;所以这更像是一种强迫,如果可能的话,我必须在我的代码中没有错误/警告。该消息是 Android Studio 编辑器中样式资源文件中的警告:android:overlapAnchor requires API level 21 (current min is 16) more... (⌘F1)
    猜你喜欢
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多