2017-05-05 7 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

あまりない...私のオリジナルのポストを1として

、私がしていましたv7サポートライブラリからPopupMenuを取得する:

import android.support.v7.widget.PopupMenu; 

しかし、私が標準ライブラリから入手した場合、報告されたグリッチなしですべてが動作するように思われます。

import android.widget.PopupMenu; 
関連する問題