我搜索了很多网站,但它们都已过时了。如何在Android 8.0中创建全屏浮动上下文菜单?
正如您所看到的here,Google向我们提供了如何在其指南中执行此操作的说明,但我猜它们也已过时。为什么?这是一个例子:
这就是它在API 23(source上的样子,他的github代码说它的API 23 = Android 6.0)
这就是它在API 26(Android 8.0)上的样子:
这些API之间必须有一些变化,但我无法得到答案。
任何解决方案都将受到赞赏。
答案 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()
直接显示视图。