android 菜单的使用,Android三种菜单的使用方式

一、选项菜单(OptionMenu)

在res目录下新建menu目录,用于放置菜单布局文件(右键res->new->Android Resource Directory->menu)

在menu下创建菜单布局文件,根标签为menu,menu下面有多个group,group下面有多个item.

简单示例如下:

android:id="@ id/oi_1"

android:title="编程语言"

android:checkable="true">

android:id="@ id/oi_2"

android:checkable="true"

android:title="算法">

重写Activity的onCreateOptionsMenu方法

@Override

public boolean onCreateOptionsMenu(Menu menu) {

//根据菜单布局文件填充菜单项

getMenuInflater().inflate(R.menu.menu_options, menu);

return true;

}

监听菜单项

@Override

public boolean onOptionsItemSelected(@NonNull MenuItem item) {

switch (item.getItemId()) {

case R.id.oi_1:

doSomething....

return true;

case R.id.oi_2:

doSomething....

return true;

case R.id.oi_3:

doSomething....

return true;

case R.id.oi_4:

doSomething....

return true;

default:

doSomething....

return super.onOptionsItemSelected(item);

}

}

二、上下文菜单

创建菜单布局文件

为指定view(可以是Button,TextView等等)注册上下文菜单

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_context_menu);

//这是一个按钮

Button colorSelector = findViewById(R.id.btn_color_selector);

//为button注册上下文菜单

registerForContextMenu(colorSelector);

}

重写Activity的onCreateOptionsMenu方法

@Override

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

super.onCreateContextMenu(menu, v, menuInfo);

//为菜单设置title

menu.setHeaderTitle("please select your favorite color:");

//填充菜单项

getMenuInflater().inflate(R.menu.menu_context, menu);

}

监听菜单项

@Override

public boolean onContextItemSelected(@NonNull MenuItem item) {

switch(item.getItemId()){

case R.id.ci_red:

colorSelector.setBackgroundColor(Color.parseColor("red"));

return true;

case R.id.ci_purple:

colorSelector.setBackgroundColor(Color.parseColor("purple"));

return true;

case R.id.ci_white:

colorSelector.setBackgroundColor(Color.parseColor("white"));

return true;

}

return super.onContextItemSelected(item);

}

取消注册

@Override

protected void onDestroy() {

super.onDestroy();

//取消注册,防止内存溢出

unregisterForContextMenu(colorSelector);

}

三、弹出式菜单

创建菜单布局文件

监听指定view点击事件,同时构建弹出菜单对象

//这是对应button的点击监听事件

public void showPopupMenu(View view) {

final PopupMenu menu = new PopupMenu(PopupMenuActivity.this, view);

getMenuInflater().inflate(R.menu.menu_popup, menu.getMenu());

menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

@Override

public boolean onMenuItemClick(MenuItem item) {

switch (item.getItemId()) {

case R.id.pi_hide:

//菜单隐藏

menu.dismiss();

return true;

default:

Toast.makeText(PopupMenuActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();

return true;

}

}

});

menu.show();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值