26

アクション バーのメニュー項目に固定したいがありますが、クリックしたい項目の にPopupWindowアクセスできないようです。ViewこれはPopupWindow showAsDropDown()メソッドに必要です。

これを達成する方法を知っている人はいますか?

4

5 に答える 5

43

onOptionsItemSelected..で取得することにより、メニュー項目 ID を使用してビューを取得できます。

findViewById(R.id.menu_item);
于 2012-11-12T13:32:41.080 に答える
39

アクション アイテムのビューを取得するために、onOptionsItemSelected で findViewById を実行する必要はありません。

ただし、アクション アイテムがオーバーフロー メニュー内にある場合があるため、代わりに null が返される場合があることに注意してください。

それで、どうすればそれができますか?

サンプルコードは次のとおりです。

public boolean onCreateOptionsMenu(final Menu menu) {
  getSupportMenuInflater().inflate(R.menu.main, menu);
  new Handler().post(new Runnable() {
    @Override
    public void run() {
      final View menuItemView = findViewById(R.id.menu_action_item);
      ...

これは、android 4.1.2 および android 2.3.5 で actionBarSherlock ライブラリを使用するときにテストされました。

もう 1 つの方法は、showcaseView ライブラリ(こちら) で使用される、より広範な方法を使用することです。

于 2013-08-25T09:24:37.997 に答える
1

私もこの問題に直面しています。findViewById は私の側で作業する必要があります。サンプル コードは次のとおりです。

private void setDrawable(final Menu menu) {
    if (menu == null || menu.size() == 0) return;

    Utils.postToUiHandler(new Runnable() {
        @Override
        public void run() {
            int size = menu.size();
            for (int i = 0; i < size; i++) {
                MenuItem menuItem = menu.getItem(i);
                if (menuItem != null) {
                    View view = activity.findViewById(menuItem.getItemId());
                    if (view != null) {
                        Drawable drawable = ThemeDrawables.get(ThemeWorker.Segment.DEFAULT).actionbarButton();
                        if (drawable != null && view.getBackground() != drawable) {
                            int sdk = android.os.Build.VERSION.SDK_INT;
                            if (sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {
                                view.setBackgroundDrawable(drawable);
                            } else {
                                view.setBackground(drawable);
                            }
                        }

                    }
                }
            }
        }
    });

}

menuitem のビューが膨張していないため、UI スレッドで findViewById を作成することに注意してください。したがって、UI スレッドで実行する必要があります。

于 2016-10-21T08:55:30.943 に答える