2017-05-05 53 views
0

我在活动布局(它是显示颜色样例的视图)中的视图上设置了长按点击侦听器。长按就会弹出一个PopupMenu并提供多种选择。当PopupMenu打开(但不是向下)时,锚点视图跳转

它工作正常,除了我发现,当我长时间点击它时,当锚点视图朝向屏幕底部定位时,因此弹出菜单将从其向上打开,锚点视图不会保留它在哪里,但跳到屏幕中间。菜单打开并正常工作,这只是我想避免的跳跃。

奇怪的是,当锚点视图朝向屏幕的顶部并且弹出菜单向下打开时,它不会发生......锚点视图保持在原来的位置。

这里是长击之前的例子......在弹出菜单锚观点是靠近屏幕底部的绿色颜色样本:

enter image description here

,这里是什么,我马上看后屏幕上弹出菜单......绿色的颜色样本已经跃升到屏幕中间:

enter image description here

下面是相关代码:

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

与其说是一个答案,但有解决方法......

按我原来的职位,我已经从v7支持库获取PopupMenu

import android.support.v7.widget.PopupMenu; 

但是,如果我从标准库中得到它,似乎所有工作都没有报告的小故障:

import android.widget.PopupMenu;