Android三种菜单的使用方式

Posted wotoufahaiduo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android三种菜单的使用方式相关的知识,希望对你有一定的参考价值。

一、选项菜单(OptionMenu)

  • res目录下新建menu目录,用于放置菜单布局文件(右键res->new->android Resource Directory->menu)
  • menu下创建菜单布局文件,根标签为menu,menu下面有多个group,group下面有多个item.
    简单示例如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/oi_1"
        android:title="编程语言"
        android:checkable="true"></item>
    <item
        android:id="@+id/oi_2"
        android:checkable="true"
        android:title="算法"></item>
</menu>
  • 重写ActivityonCreateOptionsMenu方法
@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);
  • 重写ActivityonCreateOptionsMenu方法
@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();

以上是关于Android三种菜单的使用方式的主要内容,如果未能解决你的问题,请参考以下文章

Android之在活动中使用Menu

Android_三种菜单介绍

PopupWindow的简单使用(结合RecyclerView)

求大神帮忙。。。我要用C#做个点餐系统,数据库有三种菜名,菜价和菜的图片,我要怎么把这3个数据显示。

CodeForces 741C(二分图)

三十天学不会TCP,UDP/IP网络编程-UDP,从简单的开始