从操作栏菜单项获取视图

我有一个PopupWindow ,我想要锚定到一个操作栏菜单项,但似乎无论如何去在我想要点击的项目的View 。 这是PopupWindow showAsDropDown()方法所必需的。

有谁知道如何做到这一点?

Solutions Collecting From Web of "从操作栏菜单项获取视图"

你可以通过在onOptionsItemSelected使用菜单项ID来获取视图。

 findViewById(R.id.menu_item); 

findViewById不必在onOptionsItemSelected上运行,以获取操作项的视图。

但是,请注意,有时候操作项会进入到溢出菜单中,所以你可能会得到一个空值。

所以,你怎么做到的?

这里是一个示例代码:

 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库testing的。

另一种select是在这里使用更广泛的方式,在showcaseView库上使用。

我也遇到这个问题,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); } } } } } } }); } 

请注意,我在UI线程中的findViewById作为menuitem的视图不膨胀,所以应该在UI线程中运行

每一个电话:

 activity.findViewById(R.id.menu_item); 

如果你的代码片段不使用:

 getView().findViewById(R.id.menu_item); 

它将返回null