放一些android中三种菜单的使用,包括最常见的菜单栏,还有上下文菜单ContextMenu,以及弹出式菜单PopupMenu的简单应用与对应方法参数详解。弹出式菜单
-------------------------------------------------------
弹出式菜单效果图:
弹出式菜单是当你点击某个view时弹出,弹出式菜单不像系统菜单(普通菜单)和上下文菜单需要重写回调方法来实现,弹出式菜单是new出来的,看代码:
/**
* 第一个参数上下文对象
* 第二个参数为锚点,何谓锚点?就是你这个弹出式菜单以哪个view为标准弹出,
* 如果在这个view的下面有空间就在这个view下面的空间弹出,如果没有空间就
* 在此view的上面弹出
*/
PopupMenu popupMenu = new PopupMenu(this, view);
/**
* 第一个参数为菜单布局文件
* 第二个参数为Menu对象,通过getMenu()获得。
*/
getMenuInflater().inflate(R.menu.demo4, popupMenu.getMenu());
/**
* 要想显示必须调用.show()方法
*/
popupMenu.show();
就三行核心代码,每一行代码和参数详解都有。在点击事件中执行就行。 弹出菜单也有二级显示效果,和系统菜单,上下文菜单一样,在XML文件中写了二级菜单,那么点击之后便会自动显示的,xml:
<item
android:id="@+id/item_china"
android:orderInCategory="100"
android:showAsAction="never"
android:title="中国">
<menu>
<item
android:id="@+id/item_beijing"
android:orderInCategory="200"
android:showAsAction="never"
android:title="北京"/>
<item
android:id="@+id/item_shanghai"
android:orderInCategory="200"
android:showAsAction="never"
android:title="上海"/>
</menu>
</item>
效果图:
弹出菜单的点击事件也没有回调事件,需要自己设置监听事件onMenuItemCilckListener(),并在其中实现逻辑,代码如下:
popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
String message = null ;
switch (item.getItemId()) {
case R.id.item_china:
message = "中国";
break;
case R.id.item_japan:
message = "日本";
break;
case R.id.item_america:
message = "美国";
break;
case R.id.item_action_bar:
message = "action bar";
break;
}
Toast.makeText(Demo6Activity.this, message+"被点击了", Toast.LENGTH_LONG).show();
return true;
}
});
值得注意的是最后的返回值,这个涉及到view的事件分发。简单的意思就是,返回true代码消耗这次点击事件,事件不会继续传播,如果返回false则事件会继续传播的。比如这个弹出菜单的又设置了setOnDismissListener这个事件,那么如果返回true,则这个事件不起作用,返回false则点击事件处理完后,这个事件还会起作用。
好了popupMenu菜单的使用和事件监听都说了,这里再看一下锚点的效果:
就像上面所说的,如果相对于锚点来说,下面没有空间了(此按钮被设置到屏幕最下方)就会显示到锚点(按钮)的上方。而且,锚点必须设置,不能为Null。
-------------------------------------------------------
原创,我在这里说明一下,这里的例子都是非常简单的例子,更适合初学者,只有先学会用,才能研究更深层次的东西,初学者千万不要陷入诸如每个参数到底是什么意思,这里不这样,如果那样会怎么样,这是无穷无尽的问题,非常影响入门,只有用熟悉之后,才更容易的去纠结这些东西,所以我在这里不写这些东西了。只适合初学者看看的例子。。。