android中快捷菜单,Menu控件(Android设置选项菜单和快捷菜单)

首先区分一下什么是选项菜单,什么是快捷菜单。

选项菜单是针对整个页面布局的,在这个页面布局的右上方

6862c048ce8785bd7372c158d22b7f65.png,点击之后可以会展开选项,供大家选择。

快捷菜单正如其名,十分方便,因为他可以依赖于任何控件,定义之后只需要长摁此控件,菜单列表就会出现,如右:

3781994da704f09e936a9f39150ff59f.png

定义选项菜单和快捷菜单都是有两种方法,一种是直接在activity文件中代码书写,这种方法相对比较繁琐,但是灵活性更高。还有一种是通过菜单布局文件直接定义。但是和之前所有的控件相同,要实现效果都要在activity中书写。

1.选项菜单:

1.1.使用菜单布局文件实现的选项菜单

首先先写出菜单布局文件submeun.xml:

xmlns:android="http://schemas.android.com/apk/res/android">

android:title="Add"

android:icon="@drawable/add"

android:id="@+id/menu_add">

android:title="User"

android:icon="@drawable/user"

android:id="@+id/menu_adduser"/>

android:title="Document"

android:icon="@drawable/doc"

android:id="@+id/menu_add_document"/>

android:title="Save"

android:icon="@drawable/save"

android:id="@+id/menu_save" />

android:title="Delete"

android:icon="@drawable/delete"

android:id="@+id/menu_delete"/>

然后在MainActivity中实例化这个菜单,代码如下:

@Override

public boolean onCreateOptionsMenu(Menu menu)

{

//实例化菜单

MenuInflater inflater=getMenuInflater();

inflater.inflate(R.menu.submenu ,menu);

return true;

}

1.2.在activity中直接创建选项菜单,在MainActivity写如下代码:

//定义菜单项常量

final static int MENU_ADD = Menu.FIRST;

final static int MENU_SAVE = Menu.FIRST + 1;

final static int MENU_DELETE = Menu.FIRST + 2;

final static int MENU_ADDUSER = Menu.FIRST + 3;

final static int MENU_ADDDOCUMENT = Menu.FIRST + 4;

@Override

public boolean onCreateOptionsMenu(Menu menu)

{

//添加菜单项

SubMenu sub = menu.addSubMenu(0, MENU_ADD, 0, "添加").setIcon(R.drawable.add);

//menu.add(0, MENU_ADD, 0, "添加").setIcon(R.drawable.add);

sub.add(0,MENU_ADDUSER,0,"添加用户").setIcon(R.drawable.user);

sub.add(0,MENU_ADDDOCUMENT,1,"添加文档").setIcon(R.drawable.doc);

menu.add(0,MENU_SAVE,2,"保存").setIcon(R.drawable.save);

menu.add(0,MENU_DELETE,1,"删除").setIcon(R.drawable.delete);

return true;

}

1.3怎么给这些选项设置点击事件呢?代码如下:

@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case MENU_ADD: //如果是用菜单布局文件写的,应该改为case R.id.menu_add

Toast.makeText(MainActivity.this, "添加", Toast.LENGTH_SHORT).show();

isSaved=false;

break;

case MENU_SAVE:

Toast.makeText(MainActivity.this, "保存", Toast.LENGTH_SHORT).show();

isSaved=true;

break;

case MENU_DELETE:

Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_SHORT).show();

break;

case MENU_ADDUSER:

Toast.makeText(MainActivity.this, "添加用户", Toast.LENGTH_SHORT).show();

break;

case MENU_ADDDOCUMENT:

Toast.makeText(MainActivity.this, "添加文档", Toast.LENGTH_SHORT).show();

break;

}

return super.onOptionsItemSelected(item);

}

1.4我们看到的public boolean onCreateOptionsMenu(Menu menu){}函数,只对菜单初始化一次,那么当外界有些事情触发引起菜单的改变,该怎么设置呢?我们有专门的初始化函数,代码如下:

//记录保存状态

private boolean isSaved=false;

//动态修改菜单项

@Override

public boolean onPrepareOptionsMenu(Menu menu){

MenuItem item=menu.findItem(MENU_SAVE);

if (isSaved){

item.setTitle("Save");

item.setEnabled(false); //设置能否点击

}

else{

item.setTitle("Save*");

item.setEnabled(true);

}

return true;

}

2.快捷菜单

2.1.使用菜单布局文件实现的选项菜单

菜单布局文件直接使用上面那个,下面直接看实例化菜单代码,你会发现其实差不多:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView txt=(TextView)findViewById(R.id.txtTest);

registerForContextMenu(txt); //把快捷菜单绑定到这个文本控件上

}

@Override

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {

super.onCreateContextMenu(menu, v, menuInfo);

//实例化菜单代码

MenuInflater inflater=getMenuInflater();

inflater.inflate(R.menu.submenu ,menu);

}

2.2.在activity中直接创建快捷菜单,在MainActivity写如下代码:

//定义菜单项常量

final static int MENU_ADD = Menu.FIRST;

final static int MENU_SAVE = Menu.FIRST + 1;

final static int MENU_DELETE = Menu.FIRST + 2;

final static int MENU_ADDUSER = Menu.FIRST + 3;

final static int MENU_ADDDOCUMENT = Menu.FIRST + 4;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TextView txt=(TextView)findViewById(R.id.txtTest);

registerForContextMenu(txt); //绑定菜单

}

@Override

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {

super.onCreateContextMenu(menu, v, menuInfo);

SubMenu sub = menu.addSubMenu(0, MENU_ADD, 0, "添加").setIcon(R.drawable.add);

sub.add(0,MENU_ADDUSER,0,"添加用户").setIcon(R.drawable.user);

sub.add(0,MENU_ADDDOCUMENT,1,"添加文档").setIcon(R.drawable.doc);

menu.add(0, MENU_SAVE, 2, "保存").setIcon(R.drawable.save);

menu.add(0, MENU_DELETE, 1, "删除").setIcon(R.drawable.delete);

}

快捷菜单每次从新点击控件之后都会初始化,所以不需要像上面的public boolean onPrepareOptionsMenu(Menu menu){}函数,初始化内容直接写在creat代码里即可。

2.3怎么给这些选项设置点击事件呢?代码和上面差不多,就是函数名不同,代码如下:

@Override

public boolean onContextItemSelected(MenuItem item) {

switch (item.getItemId()) {

case MENU_ADD:

Toast.makeText(MainActivity.this, "添加", Toast.LENGTH_SHORT).show();

isSaved=false;

break;

case MENU_SAVE:

Toast.makeText(MainActivity.this, "保存", Toast.LENGTH_SHORT).show();

isSaved=true;

break;

case MENU_DELETE:

Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_SHORT).show();

break;

case MENU_ADDUSER:

Toast.makeText(MainActivity.this, "添加用户", Toast.LENGTH_SHORT).show();

break;

case MENU_ADDDOCUMENT:

Toast.makeText(MainActivity.this, "添加文档", Toast.LENGTH_SHORT).show();

break;

}

return super.onContextItemSelected(item);

}

好了,今天就介绍到这,代码在这里:https://download..net/download/qq_38367681/10803684

参与评论 您还未登录,请先 登录 后发表或查看评论
相关推荐

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值