android简单实例--------普通菜单optionMenu,上下文菜单ContextMenu,弹出式菜单的使用PopuMenu(三)

放一些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。

-------------------------------------------------------

原创,我在这里说明一下,这里的例子都是非常简单的例子,更适合初学者,只有先学会用,才能研究更深层次的东西,初学者千万不要陷入诸如每个参数到底是什么意思,这里不这样,如果那样会怎么样,这是无穷无尽的问题,非常影响入门,只有用熟悉之后,才更容易的去纠结这些东西,所以我在这里不写这些东西了。只适合初学者看看的例子。。。 微笑
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值