第一次写博客,还有点小紧张,废话不多说,切入正题
android有3中菜单按钮 分别是 选项菜单,上下文菜单,弹出式菜单
1.选项菜单(显示在右边)
有两种实现方式:
1.在代码中直接添加
public boolean onCreate OptionsMenu(Menu menu){
menu.add(0,100,10,"|Hello");
}
第一个参数 0表示在第几组
第二个参数 100 表示ID,你点击的时候需要通过这个ID来确定点击的是哪个
第三个参数 10表示 在这个菜单栏的上面还是下面,数值大的,在下面,小的在上面
第四个参数"Hello" 表示 你在菜单按钮中显示的内容
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId){
case R.id.xx:
break;
}
}
这里的R.id.xx就是通过上面方法的第二个参数
2.在XML中实现,在代码中调用
在res目录下有个menu
<item android:id="@+id/ll" android:title="Hello"
android:orderInCategory="100" app:showAsAction="never"/>
前面三个参数没什么好说的,跟上面的对应,这里说下最后一个参数 showAsAction 这里可以设置几个属性 说几个常用的 never 不显示 always 一直显示 ifRoom有空间才显示
调用的话 就在上面的第一个方法中直接
getMenuInflater().inflate(R.menu.xxx,menu);
点击事件跟上面的第二个方法是一样的
2.上下文菜单 (显示在中间) 长按触发事件
也分两种,这里就不细说了 直接说主要方法,实现逻辑跟上面的差不多
主要有三个方法
1.
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater menuInflater=getMenuInflater();
menuInflater.inflate(R.menu.xxx,menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()){
}
return super.onContextItemSelected(item);
}
registerForContextMenu(xx);
前面两个方法跟选项菜单按钮差不了多少,在XML中少了showAsAction这个参数
值得主要的是最后一个方法,里面放的是一个View 就是你需要长按的哪个控件
3.弹出式菜单(位置不确定)
弹出式菜单式停靠在一个View上的模式菜单,当你点击它的时候,如果View的下面有空间,那么弹出式菜单会显示在停靠对象的下面,否则将显示在上方
注意:弹出式菜单在API 11或者以上的版本才支持,当然,现在就没有会低于11 的
这里来看下具体的实现:
PopupMenu popupMenu=new PopupMenu(this,v);
MenuInflater menuInflater=popupMenu.getMenuInflater();
menuInflater.inflate(R.menu.xxx,popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(this);
popupMenu.show();
在XML文件中实现 直接就是 new PopupMenu()
第一个参数是 上下文
第二个参数是 你点击的那个事件源
弹出式菜单的点击事件是用 new出来的 popupMenu.setOnMenuItemClickListener
我这里是让Activity去实现
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()){
}
return true;
}
是不是发现这3中菜单点击事件都差不多呢。。。其实就是这么简单 哈哈 !!
不知道说的对不对,我是新手,如有不对的地方 ,欢迎各位大神指导!!