您的位置:首页 > 移动开发 > Android开发

android学习记录(十五)Menu综合

2015-04-25 11:17 579 查看
在android中,有以下几种菜单:

1.Options Menu(选项菜单);

效果,在action bar处显示所定义的菜单项。



2.Context Menu(上下文菜单);

效果:长按后弹出菜单窗口在屏幕中央。



3.Popup Menu(弹出框菜单)。

效果:在所绑定的view 的上边或下边显示菜单窗口。

4.contextual Action Mode。(这个我打算另立一篇blog。也比较常用。常用于listView等adapterView里,进行多选,然后同时对多个选项进行操作。)

1.选项菜单。

选项菜单所出现的位置是actionbar。现在主要用来干什么?一般都是用来定义搜索,设置,分享等功能。

如何定义选项菜单?

1.定义menu文件。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
android:showAsAction="always"
android:title="item">
<menu>
<item android:title="menu1"/>
<item android:title="menu2"/>
</menu>
</item>
</menu>


2.加载menu菜单文件。activity文件:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_4_23, menu);
return true; //当你inflate菜单后需要return true,不然不会显示

}


3.点击事件处理。
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {<span style="white-space:pre">	</span>
case R.id.menu1:
Toast.makeText(this, "menu1 has been seleted", Toast.LENGTH_SHORT).show();
return true;<span style="white-space:pre">	</span>//return true 告知系统这里处理了该事件
case R.id.menu2:
Toast.makeText(this, "menu2 has been seleted", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onContextItemSelected(item);
}
}
点击item后效果图:



2.Context Menu 上下文菜单

其实它的使用也是类似与options menu,显示的地方和时间不同罢了。它是在用户长按某个view后弹出的在屏幕中央的菜单框。

定义Context Menu:

1.创建ContextMenu:(activity内)

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);

getMenuInflater().inflate(R.menu.context_menu_4_23, menu);//看着都一样,通过menuInflater去填充view视图。当然啦,首先还是要定义menu文件的。

}


<span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"><span style="white-space:pre">	</span>2.定义点击ContextMenu中item的处理方法</span>

@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu1:
Toast.makeText(this, "menu1 has been seleted", Toast.LENGTH_SHORT).show();
return true;
case R.id.menu2:
Toast.makeText(this, "menu2 has been seleted", Toast.LENGTH_SHORT).show();
return true;
default:
return super.onContextItemSelected(item);
}

}


3.为所需要context Menu的View视图注册。
为什么要这么做?当然啦,不然系统怎么知道哪个view需要这个contextView哪个View不需要啊。你或许会想:为什么不默认activity所有View都附加cotext Menu?想想这样的坏处:我不希望一些view有这种想过可是它却默认拥有?例如我只想让listView中的item拥有而已,却连button长按都出现例如delete这样的选项?think about it。

TextView mContextTv =(TextView) findViewById(R.id.contextMenuTv);
registerForContextMenu(mContextTv);
然后长按该view对象就会出现如下所示画面:



3.PopupMenu(弹出菜单)

它的效果与context menu是类似的,位置显示略有不同,它是出现在绑定的view的附近(上边或下边)。

1.定义menu文件。
2.构建与某个view对象绑定的popup menu对象,填充视图,设置监听器,并显示。
public void showMenu(View v) {
PopupMenu popup = new PopupMenu(this, v);

// 设置监听器接口,本类实现了该接口。
popup.setOnMenuItemClickListener(this);
popup.inflate(R.menu.actions);
popup.show();
}

@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.archive:
archive(item);
return true;
case R.id.delete:
delete(item);
return true;
default:
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: