在“ActionBar”项目点击显示popup菜单
我有一个ActionBar
上的一个行动项目。 点击行动项目后,我想显示一个popup式菜单。 我实现了这个方法,但我想将它锚定到操作项或ActionBar
,而不是布局的任何视图。 如何获得某种视图从MenuItem
锚定它?
public boolean onOptionsItemSelected(MenuItem item) { PopupMenu popupMenu = new PopupMenu(this, ??????); // What view goes here? popupMenu.inflate(R.menu.counters_overflow); popupMenu.show(); // ... return true; }
所以最后我find解决scheme。 当你想在ActionBar中将popup菜单定位到ActionItem时,你需要find呈现ActionItem的视图。 使用findViewById()简单查找视图,其中id与xml中菜单项的id相同。
展示popup窗口:
public boolean onOptionsItemSelected(MenuItem item) { // ... View menuItemView = findViewById(R.id.menu_overflow); // SAME ID AS MENU ID PopupMenu popupMenu = new PopupMenu(this, menuItemView); popupMenu.inflate(R.menu.counters_overflow); // ... popupMenu.show(); // ... return true; }
菜单:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > .... <item android:id="@+id/menu_overflow" android:icon="@drawable/ic_overflow" android:showAsAction="ifRoom" android:title="@string/menu_overflow"/> .... </menu>
如果菜单项不可见(处于溢出状态),则不起作用。 findViewById返回null,所以你必须检查这种情况,并锚定到另一个视图。
public boolean onOptionsItemSelected(MenuItem item) { final View addView = getLayoutInflater().inflate(R.layout.add, null); new AlertDialog.Builder(this).setTitle("Add a Word").setView(addView) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { addWord((TextView) addView.findViewById(R.id.title)); } }).setNegativeButton("Cancel", null).show(); return (super.onOptionsItemSelected(item)); }
在这里获取完整的源代码
http://vimaltuts.com/android-tutorial-for-beginners/android-action-bar-tab-menu-example
- 我应该在我的接收器中使用android:process =“:remote”吗?
- 如何在NavigationView中自定义项目背景和项目文本颜色?
- 更新Android支持库到23.2.0导致错误:XmlPullParserException二进制XML文件行#17 <vector>标记要求viewportWidth> 0
- SocketException:权限被拒绝?
- Android / Java中的JSON数组迭代
- Android微调多select
- 将ListFragment中的数据更新为ViewPager的一部分
- Android相机android.hardware.Camera弃用
- 活动开始时如何避免自动出现android键盘