Android:获取视图引用菜单项

我打算在我的应用程序中使用快速操作UI模式。 Android快速操作用户界面模式 。 快速操作窗口需要一个枢轴视图来坚持。

quickAction.show(View pivotView); 

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

我怎样才能得到所选menuItem中的一个视图的引用。

你可以通过在xml中为你的菜单项提供一个actionViewClass属性来实现这一点,然后你将能够获得你想要的枢轴视图。 代码会是这样的

 <item android:id="@+id/menu_find" android:showAsAction="ifRoom" android:actionViewClass="android.widget.ImageButton" /> 

在你的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; } 

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

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

MenuItems上的QuickActions不是很好的devise,但是我发现它们是用自定义背景实现子菜单的最简单的方法。

任何想要find菜单视图项目的其他原因(如我想要的)的更新。

如果你有访问和使用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... } } } } 

在主要活动类中,最好重写onOptionsItemSelected(…)方法; 应该是如下的东西:

 public boolean onOptionsItemSelected(MenuItem item) { // the id is of type int int someId = item.getItemId(); // can use an if() or switch() statement to check if id is selected //a Toast message can be used to show item is selected }