0
我在活动布局(它是显示颜色样例的视图)中的视图上设置了长按点击侦听器。长按就会弹出一个PopupMenu并提供多种选择。当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);