49

私は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;
}
4

5 に答える 5

126

だからついに私は解決策を見つけました。ポップアップメニューを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を返すため、この状況を確認して別のビューにアンカーする必要があります。

于 2013-02-07T06:50:37.040 に答える
0

受け入れられた回答に加えて、 onOptionsItemSelected() メソッドの呼び出しごとにポップアップを再膨張させる問題は、一度だけ実行して必要な回数だけ表示することで簡素化できます。
(これは、実行時に Menu Layout Inflater を介して拡張されたカスタム ツールバーに対しても機能します。メニュー項目のビューを取得するための findViewById() は、ビューが実際に画面上に存在する場合にのみ、null 以外の値を返すことができることに注意してください。ツールバー/アクションバーに表示されます。

: ビューがツールバー/アクション バーのオーバーフロー メニューに事前設定されている場合、オーバーフロー メニューが少なくとも 1 回呼び出された後にのみビューが膨張する可能性があります (3 つのドットを使用しますか?)。

public class SomeActivity{
    
    private PopupMenu popup;
    .... // some code of the activity

@Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        int menuItem = item.getItemId();
        switch (menuItem) {
            case R.id.tb_menu_plus:
                View menuItemView = findViewById(R.id.tb_menu_plus);
                if(popup == null) {
                    popup = new PopupMenu(this, menuItemView);
                    popup.inflate(R.menu.dropdown_popup_menu);
                }
                popup.show();
                return true;
        }
        return super.onOptionsItemSelected(item);
    }

ここに画像の説明を入力

于 2021-02-06T17:42:16.977 に答える
-5
public boolean onOptionsItemSelected(MenuItem item) {
    final View addView = getLayoutInflater().inflate(R.layout.add, null);

            new AlertDialog.Builder(this).setTitle("Add a Word").setView(addView)
                    .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                            addWord((TextView) addView.findViewById(R.id.title));
                        }
                    }).setNegativeButton("Cancel", null).show();
return (super.onOptionsItemSelected(item));
    }

ここで完全なソースフォームを入手してください。

http://vimaltuts.com/android-tutorial-for-beginners/android-action-bar-tab-menu-example

于 2013-02-06T13:04:57.557 に答える