我在Activity布局中的视图上设置了一个长按监听器(它是一个显示颜色样本的视图)。长按一次将弹出一个有许多选项的PopupMenu。
它工作正常除了我发现当我长时间点击它时锚点视图朝向屏幕底部,因此弹出菜单将从它向上打开,锚视图不会保持在它只是跳到屏幕中间。菜单打开并正常运行,这只是我想要避免的跳跃。
奇怪的是,当锚点视图朝向屏幕顶部并且弹出菜单向下打开时,它不会发生...锚点视图保持原样。
以下是长按之前的示例...弹出菜单的锚点视图是靠近屏幕底部的绿色色板:
以下是菜单弹出后我立即看到的内容......绿色色板已经跳到屏幕中间:
以下是相关代码:
popup_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/colourCopy"
android:title="@string/menu_colourCopy"/>
<item
android:id="@+id/colourCopySingle"
android:title="@string/menu_colourCopySingle"/>
<item
android:id="@+id/colourCopyMultiple"
android:title="@string/menu_colourCopyMultiple"/>
<item
android:id="@+id/colourEndMultiple"
android:title="@string/menu_colourEndMultiple"/>
<item
android:id="@+id/colourPaste"
android:title="@string/menu_colourPaste"/>
<item
android:id="@+id/colourReset"
android:title="@string/menu_colourReset"/>
</menu>
MyActivity.java:
import android.support.v7.widget.PopupMenu;
View.OnLongClickListener longClickListener = new View.OnLongClickListener() {
public boolean onLongClick(final View v) {
PopupMenu popup = new PopupMenu(MyActivity.this, v);
popup.getMenuInflater()
.inflate(R.menu.popup_menu, popup.getMenu());
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
public boolean onMenuItemClick(MenuItem item) {
switch( item.getItemId() ) {
case R.id.colourCopy:
Log.d(TAG, "Menu colourCopy clicked");
break;
case R.id.colourCopySingle:
Log.d(TAG, "Menu colourCopySingle clicked");
break;
case R.id.colourCopyMultiple:
Log.d(TAG, "Menu colourCopyMultiple clicked");
break;
case R.id.colourPaste:
Log.d(TAG, "Menu colourPaste clicked");
break;
case R.id.colourEndMultiple:
Log.d(TAG, "Menu colourEndMultiple clicked");
break;
case R.id.colourReset:
Log.d(TAG, "Menu colourReset clicked");
break;
default:
}
return true;
}
});
popup.show();
return true;
}
};
View colorView = view.findViewById(setting.viewId);
colorView.setOnLongClickListener(longClickListener);
答案 0 :(得分:1)
不是一个答案,而是一个解决方法......
根据我的原始帖子,我从v7支持库获得了PopupMenu
:
import android.support.v7.widget.PopupMenu;
但是如果我从标准库中得到它,那么它似乎都没有报告的故障:
import android.widget.PopupMenu;