如何在ActionBar上面添加popup menu
来源:互联网 发布:tcp网络编程步骤 编辑:程序博客网 时间:2024/05/03 12:56
标签: 如何 分类: Android
在Android文档中,对于popup menu的讲解非常的简单,只是说了怎么创建。popup menu有个特点就是必须提供一个anchor view来让popup menu依附于它。sdk文档中有创建popup menu 的函数:
- public void showPopup(View v) {
- PopupMenu popup = new PopupMenu(this, v);
- MenuInflater inflater = popup.getMenuInflater();
- inflater.inflate(R.menu.actions, popup.getMenu());
- popup.show();
- }
这样的话对于在普通的view上面创建popup menu就非常容易了,只需要将该view作为参数调用这个函数就可以了。
但是在action bar上怎么能得到这个anchor view呢?我尝试了n种方法都无法将popup menu顺利得添加到 action bar 上百思不得其解。后来一想,既然这条路走不通了,那能不能从action bar 这着手呢?果然在action bar的sdk中有Add an Action Provider,通过这个可以添加如分享功能的popup menu,当然这个是由系统定义的。而且我们可以定义自己的 action provider。创建MyActionProvider,使其继承ActionProvider类:
- public class MyActionProvider extends ActionProvider {
- /** Context wrapper. */
- private ContextWrapper mContextWrapper;
- PopupMenu mPopupMenu;
- public DtcpActionProvider(Context context) {
- super(context);
- mContextWrapper = (ContextWrapper)context;
- }
- @Override
- public View onCreateActionView() {
- // Inflate the action view to be shown on the action bar.
- LayoutInflater layoutInflater = LayoutInflater.from(mContextWrapper);
- View view = layoutInflater.inflate(R.layout.my_action_provider, null);
- ImageView popupView = (ImageView)view.findViewById(R.id.popup_view);
- popupView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- showPopup(v);
- }
- });
- return view;
- }
- /**
- * show the popup menu.
- *
- * @param v
- */
- private void showPopup(View v) {
- mPopupMenu = new PopupMenu(mContextWrapper, v);
- mPopupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- // do someting
- return false;
- }
- });
- MenuInflater inflater = mPopupMenu.getMenuInflater();
- inflater.inflate(R.menu.popup_up_menu, mPopupMenu.getMenu());
- mPopupMenu.show();
- }
- }
这里面最关键的是实现onCreateActionView()方法,该方法返回的view即为显示在action bar上可以点击的图标。点击后会调用showPopup方法将popup menu创建并显示出来。
my_action_provider.xml即为在action bar上显示的图标:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <ImageView
- android:id="@+id/popup_view"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="20dip"
- android:src="@drawable/ownload_icon" />
- </LinearLayout>
popup_menu.xml则为popup menu中的选项:
- <?xml version="1.0" encoding="utf-8"?>
- <menu xmlns:android="http://schemas.android.com/apk/res/android" >
- <item
- android:id="@+id/popup_menu_option_download"
- android:title="@string/ics_downloader_strings"/>
- <item
- android:id="@+id/popup_menu_option_share"
- android:title="@string/ics_sharer_strings"/>
- </menu>
最后在menu.xml里面将这个item给添加上,让其在action bar 上显示出来:
- <item
- android:id="@+id/menu_popup_view"
- android:actionProviderClass="my.test.MyActionProvider"
- android:showAsAction="ifRoom"/>
这样的话就可以顺利在action bar 上添加上自定义的popup menu了。
- 如何在ActionBar上面添加popup menu
- 如何在ActionBar上面添加popup menu
- 如何在ActionBar上面添加popup menu
- ActionBar上面添加popup menu
- android: 在fragment中添加actionbar, menu
- 在ActionBar / ToolBar 中添加 overflow menu的方法
- Android ActionBar添加menu按钮
- Android ActionBar添加menu按钮
- VS2010(MFC)添加POPUP MENU的方法
- 如何在SVN上面添加一个新项目
- 如何在一个Activity中添加menu
- Android系统五种常用的 Menu!OptionMenu/ContextMenu/Actionbar/Contextual aciton mode/popup menu
- SDI客户区添加弹出菜单(Popup Menu)
- 如何添加ActionBar
- android actionbar 直接显示在 actionbar栏上面
- 如何让有物理键的手机在ActionBar始终显示更多菜单menu键
- menu文件在actionbar中的用法
- 如何在基于Dialog的程序中添加menu菜单 ?
- 【Linux】Linux网络编程必看书籍推荐
- Extjs Store使用
- 【Linux】Linux内核学习四库全书
- XMPP使用tls 和sasl登录
- Textile & Markdown
- 如何在ActionBar上面添加popup menu
- hibernate 用SQLQuery/HQL查询的 查询 记录是否存在。
- 楼房开盘
- linux进程状态浅析
- 《钢铁侠》等电影中的image based lighting和physical shading
- ATL技术内幕 第二部分
- ACM水题-AB串(AC,分情况,要小心陷阱,两种思路)
- Markdown: Basics (Markdown快速入门)
- IO知识点总结2