私はアクティビティレイアウトのビュー(色見本を表示するビュー)に長いクリックリスナーを設定しました。長いクリックは、いくつかの選択肢を持つ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);