Android 8.0(API 26+)中的全屏浮动上下文菜单

时间:2018-03-12 11:43:35

标签: android floating

我搜索了很多网站,但它们都已过时了。如何在Android 8.0中创建全屏浮动上下文菜单?

正如您所看到的here,Google向我们提供了如何在其指南中执行此操作的说明,但我猜它们也已过时。为什么?这是一个例子:

这就是它在API 23(source上的样子,他的github代码说它的API 23 = Android 6.0) enter image description here

这就是它在API 26(Android 8.0)上的样子:

enter image description here

这些API之间必须有一些变化,但我无法得到答案。

任何解决方案都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

它实际上是特定于版本的行为。

您链接的项目的解决方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    button = (Button) findViewById(R.id.button);

    registerForContextMenu(button);

    button.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            button.showContextMenu();
            return true;
        }
    });
}

如果阅读有关View类的performLongClick()的文档:

/**
 * Calls this view's OnLongClickListener, if it is defined. Invokes the
 * context menu if the OnLongClickListener did not consume the event,
 * anchoring it to an (x,y) coordinate.
 *
 * @param x x coordinate of the anchoring touch event, or {@link Float#NaN}
 *          to disable anchoring
 * @param y y coordinate of the anchoring touch event, or {@link Float#NaN}
 *          to disable anchoring
 * @return {@code true} if one of the above receivers consumed the event,
 *         {@code false} otherwise
 */
public boolean performLongClick(float x, float y) 

所以它是显示上下文菜单的标准实现(如果在视图上注册监听器上下文菜单,它将使用坐标处理)。因此,为避免显示带坐标的菜单,只需通过 showContextMenu()

直接显示视图。