我有一个 PopupWindow
,希望将其锚定到操作栏菜单项,但似乎找不到要点击的菜单项的View
。
这是使用 PopupWindow
的 showAsDropDown()
方法所必需的。
有人知道如何实现吗?
我有一个 PopupWindow
,希望将其锚定到操作栏菜单项,但似乎找不到要点击的菜单项的View
。
这是使用 PopupWindow
的 showAsDropDown()
方法所必需的。
有人知道如何实现吗?
通过在onOptionsItemSelected
中获取菜单项ID,可以获取视图..
findViewById(R.id.menu_item);
为了获取操作项的视图,不必在onOptionsItemSelected上运行findViewById。
但请注意,有时操作项会在溢出菜单中,因此可能会返回空值。
那么,你该怎么做呢?
以下是示例代码:
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);
...
这是在使用actionBarSherlock库时进行测试的,测试环境为android 4.1.2和android 2.3.5。
另一种选择是使用更全面的方法,它在showcaseView库中被使用,这里。
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);
}
}
}
}
}
}
});
}
随时随地通话:
activity.findViewById(R.id.menu_item);
如果您的片段内的代码没有使用:
getView().findViewById(R.id.menu_item);
只需调用findViewById
(你的菜单id),但记住不要在OnCreate(...)
中调用,因为此时菜单还没有被填充,而是在onOptionsItemSelected
中调用。