Android:获取视图对菜单项的引用

Yas*_*mar 51 android menu view menuitem quickaction

我打算在我的应用程序中使用快速操作UI模式.Android Quick Actions UI模式.快速操作窗口需要一个枢轴视图才能坚持下去.

    quickAction.show(View pivotView);
Run Code Online (Sandbox Code Playgroud)

我打算对菜单项使用快速操作,我可以访问被点击的项目.但问题是我需要从菜单项引用一个视图,以便我可以将它传递给快速操作.

如何在所选的menuItem中引用视图.

ASH*_*ASH 94

您可以通过在xml中为菜单项提供actionViewClass属性来实现此目的,然后您就可以获得所需的数据透视视图.代码就是这样的

<item
    android:id="@+id/menu_find"
    android:showAsAction="ifRoom"
    android:actionViewClass="android.widget.ImageButton"
    />
Run Code Online (Sandbox Code Playgroud)

在您的OnCreateOptionsMenu中执行此操作

public boolean onCreateOptionsMenu(Menu menu) {
    super.onCreateOptionsMenu(menu);
    getMenuInflater().inflate(R.menu.menu_search, menu);
    locButton = (ImageButton) menu.findItem(R.id.menu_find).getActionView();
    locButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            createPopup();
            mQuickAction.show(v);
        }
    });
    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您使用最近的库,请使用app:actionViewClass.(RES-AUTO) (17认同)
  • 这是有效的,但图标不再显示 (6认同)

loa*_*ion 37

老问题,但我遇到了actionViewClass属性的一些问题.对于后来碰到这个的人来说......

调用findViewById(R.id.mnu_item)onOptionsItemSelected会返回一个View锚.

QuickActions对于MenuItems不好的设计,但我发现它们是实现具有自定义背景的子菜单的最简单方法.


jaz*_*bpn 10

为了获得菜单项的参考视图,我们需要这样做,

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.section, menu);

    new Handler().post(new Runnable() {
        @Override
        public void run() {

            final View menuItemView = findViewById(R.id.action_preview);
            // SOME OF YOUR TASK AFTER GETTING VIEW REFERENCE

        }
    });


    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 最好的方法,而无需创建任何自定义视图和setactionview (2认同)

Mat*_*son 6

对于出于其他原因(如我想要的)想要查找菜单视图项的任何人的更新。

如果您可以访问并使用 AppCompat 的工具栏,则有一种方法。这不是最有效的方法,但它是我发现访问菜单项视图的最简单方法。

public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);

    // Find Menu
    for (int toolbarChildIndex = 0; toolbarChildIndex < toolbar.getChildCount(); toolbarChildIndex++) {
        View view = toolbar.getChildAt(toolbarChildIndex);

        // Found Menu
        if (view instanceof ActionMenuView) {
            ActionMenuView menuView = (ActionMenuView) view;

            // All menu items
            for (int menuChildIndex = 0; menuChildIndex < menuView.getChildCount(); menuChildIndex++) {
                ActionMenuItemView itemView = (ActionMenuItemView) menuView.getChildAt(menuChildIndex);
                // Do something to itemView...
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)