ActionBar
にアクションアイテムがあります。アクションアイテムをクリックした後、ポップアップメニューを表示したいと思います。このメソッドを実装しましたが、レイアウトからのビューではなく、アクションアイテムまたはActionBar
に固定します。 MenuItem
からアンカーするためのある種のビューを取得する方法は?
public boolean onOptionsItemSelected(MenuItem item) {
PopupMenu popupMenu = new PopupMenu(this, ??????); // What view goes here?
popupMenu.inflate(R.menu.counters_overflow);
popupMenu.show();
// ...
return true;
}
それでようやく解決策を見つけました。ポップアップメニューをActionBarのActionItemに固定する場合、ActionItemをレンダリングするビューを見つける必要があります。 findViewById()を使用した単純な検索ビュー。idはxmlのメニュー項目のIDと同じです。
ポップアップの表示:
public boolean onOptionsItemSelected(MenuItem item) {
// ...
View menuItemView = findViewById(R.id.menu_overflow); // SAME ID AS MENU ID
PopupMenu popupMenu = new PopupMenu(this, menuItemView);
popupMenu.inflate(R.menu.counters_overflow);
// ...
popupMenu.show();
// ...
return true;
}
メニュー:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android" >
....
<item
Android:id="@+id/menu_overflow"
Android:icon="@drawable/ic_overflow"
Android:showAsAction="ifRoom"
Android:title="@string/menu_overflow"/>
....
</menu>
メニュー項目が表示されない(オーバーフローしている)場合、機能しません。 findViewByIdはnullを返すため、この状況を確認して別のビューに固定する必要があります。