Android菜单创建和使用

Menu:

3.0以前用户点击底部菜单按钮菜单内容出现在底部

3.0以后选项菜单的项目出现在操作栏中,用户可以使用操作栏右边的图标或者菜单键操作溢出菜单

三大菜单:

选项菜单(OptionMenu)

在res文件夹右键创建AndroidResourceDirectory

选择Menu再右键menu新建menu Resourcefile

<item
    android:title="保存"

    />
<item
    android:title="设置"
    />
<item android:title="更多操作" >
    <menu >
        <item android:title="子菜单1" />
        <item android:title="子菜单2" />
        <item android:title="子菜单3" />
    </menu>
</item>

嵌套时要用menu包裹item  

但只能嵌套一层

package com.example.mmenudemo;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }

    @Override//创建optionMenu
    public boolean onCreateOptionsMenu(Menu menu) {
        //加载菜单资源到当前菜单
        getMenuInflater().inflate(R.menu.option, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.save:
                Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();
                break;
            case R.id.setting:
                Toast.makeText(this, "设置", Toast.LENGTH_SHORT).show();
                break;
            case R.id.exit:
                Toast.makeText(this, "tuichu", Toast.LENGTH_SHORT).show();
                finish();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

@Override//创建optionMenu
    public boolean onCreateOptionsMenu(Menu menu) {
        //加载菜单资源到当前菜单
        getMenuInflater().inflate(R.menu.option,menu );
        return true;//必须返回true不然不显示
    }

使用该方法就可加载菜单

public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.save:
            Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();
            break;
        case R.id.setting:
            Toast.makeText(this, "设置", Toast.LENGTH_SHORT).show();
            break;
        case R.id.exit:
            Toast.makeText(this, "tuichu", Toast.LENGTH_SHORT).show();
            finish();
            break;//default: super.onOptionsItemSelected(item);最好写上
    }
    return super.onOptionsItemSelected(item);//最好返回true
}

获取点了那个菜单选项并进行相应操作

常用属性

app:showAsAction=""always一直显示方便使用配合android:icon=""可直接在标题栏显示图标

always|with Text显示图标和中文/never不显示/collapseActionView折叠通常结合ifRoom(有空间时)

android:id

上下文菜单(ContextMenu)

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //ContextMenu演示
    //注册,固定显示在某个view下
    registerForContextMenu(findViewById(R.id.ContextMenu));
    //创建覆盖onCreateContextMenu

    //菜单项的操作

}
@Override//加载资源
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
 getMenuInflater().inflate(R.menu.context,menu);
}

//菜单项的操作

@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
    switch (item.getItemId()) {
        case R.id.deelete:
            Toast.makeText(this, "删除", Toast.LENGTH_SHORT).show();
            break;
        case R.id.rename:
            Toast.makeText(this, "重命名", Toast.LENGTH_SHORT).show();
            break;
        case R.id.caozuo1:
            Toast.makeText(this, "caozuo1", Toast.LENGTH_SHORT).show();
            break;
        case R.id.caozuo2:
            Toast.makeText(this, "caozuo2", Toast.LENGTH_SHORT).show();
            break;
    }
    return super.onContextItemSelected(item);
}

另一种方法


public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        //4.为按钮设置上下文操作模式
        //4.1实现ActionMode CallBack接口
        //4.2在View的长按事件中去启动上下文操作模式
        findViewById(R.id.ContextMenu).setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                startActionMode(cb);
                return false;
            }
        });
        
    }
    ActionMode.Callback cb= new ActionMode.Callback() {
        @Override//创建方法,在启动上下文操作模式()startActionMode时调用
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
            Log.e("tag","qidong");
            getMenuInflater().inflate(R.menu.context,menu);
            return true;
        }

        @Override//准备,在创建方法后调用
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
            Log.e("tag","准备");
            return false;
        }

        @Override//点击了那些菜单项
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
            Log.e("tag","点击");
            switch (menuItem.getItemId()) {
                case R.id.deelete:
                    Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.rename:
                    Toast.makeText(MainActivity.this, "重命名", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.caozuo1:
                    Toast.makeText(MainActivity.this, "caozuo1", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.caozuo2:
                    Toast.makeText(MainActivity.this, "caozuo2", Toast.LENGTH_SHORT).show();
                    break;
            }
            return true;
        }

        @Override//上下文操作结束时调用
        public void onDestroyActionMode(ActionMode actionMode) {
            Log.e("tag","结束");

        }
    };

弹出菜单(PopupMenu)

package com.example.mymenudemo2;

import androidx.annotation.BoolRes;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.ActionMode;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //Button optionMenu = findViewById(R.id.optionMenu);
        Button context = findViewById(R.id.contextMenu);
        registerForContextMenu(context);
        //第二种
       /* findViewById(R.id.contextMenu).setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                startActionMode(cb);
                return false;
            }
        });*/
        //popMenu弹出菜单
        final Button button = findViewById(R.id.popupMenu);
      button.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
    //实例化popupMenu对象                  ///上下文环境,     View的实例化对象出现在谁的旁边
              PopupMenu menu=new PopupMenu(MainActivity.this,button);
              //加载资源,将1参绑定到2
              menu.getMenuInflater().inflate(R.menu.popup,menu.getMenu());

              menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                  @Override
                  public boolean onMenuItemClick(MenuItem menuItem) {
                      switch (menuItem.getItemId()){
                          case R.id.popup1:
                              Toast.makeText(MainActivity.this,"popup1",Toast.LENGTH_SHORT).show();
                              break;
                          case R.id.popup2:
                              Toast.makeText(MainActivity.this,"popup2",Toast.LENGTH_SHORT).show();
                              break;
                      }
                      return false;
                  }
              });
              menu.show();
          }
      });


    }

    //----------------------------------------------------------------
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.option, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.option1:
                Toast.makeText(this, "option1", Toast.LENGTH_SHORT).show();
                Log.d("va", "fava");
                break;
            case R.id.option2:
                Toast.makeText(this, "option2", Toast.LENGTH_SHORT).show();
                break;

        }
        return super.onOptionsItemSelected(item);
    }
    //---------------------------------------------------

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        getMenuInflater().inflate(R.menu.context, menu);

    }

    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.context1:
                Toast.makeText(MainActivity.this,"context1",Toast.LENGTH_SHORT).show();
                break;
            case R.id.context2:
                Toast.makeText(MainActivity.this,"context2",Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }
   /*context第二种
   ActionMode.Callback cb=new ActionMode.Callback() {
        @Override
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
            getMenuInflater().inflate(R.menu.context,menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
            switch (menuItem.getItemId()){
                case R.id.context1:
                    Toast.makeText(MainActivity.this,"context1",Toast.LENGTH_SHORT).show();
                    break;
                case R.id.context2:
                    Toast.makeText(MainActivity.this,"context2",Toast.LENGTH_SHORT).show();
                    break;
            }
            return true;
        }

        @Override
        public void onDestroyActionMode(ActionMode actionMode) {

        }
    };*/
}

首先findViewById获取Button但必须为final型

设置监听事件button.setOnclickListener(

(new View.OnClickListener() {
 //1实例化一个popmenu对象               /上下文环境/View的实例化对象被锚定的View菜单出现在谁的下边
 PopupMenu menu = new PopupMenu(MainActivity.this, button);
 //2加载资源,利用MenuInflater将Menu资源加载到PopupMenu.getMenu()所返回的Menu对象中
 //将R.menu.*对应的菜单资源加载到弹出式菜单中即将第一个参数的资源加载到第二个参数中
 menu.getMenuInflater().inflate(R.menu.popupmenu, menu.getMenu());

 // 3为popMenu设置点击监听器
 menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
     @Override
     public boolean onMenuItemClick(MenuItem menuItem) {
         switch (menuItem.getItemId()) {
             case R.id.b1:
                 Toast.makeText(MainActivity.this, "b1", Toast.LENGTH_LONG).show();
                 break;
             case R.id.b2:
                 Toast.makeText(MainActivity.this, "b2", Toast.LENGTH_LONG).show();
                 break;
             case R.id.b3:
                 Toast.makeText(MainActivity.this, "b3", Toast.LENGTH_LONG).show();
                 break;
             case R.id.b4:
                 Toast.makeText(MainActivity.this, "b4", Toast.LENGTH_LONG).show();
                 break;


         }
         return false;
     }
 });
 //4.最容易忘记的一步
menu.show();//显示
});

java代码实现OptionMenu

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
     //xml资源设置menu
        //   getMenuInflater().inflate(R.menu.option, menu);

        //纯java设计Menu
        //Menu
        //subMenu
        /*

        设置
        更多
           添加
           删除*/
        //参数1组id参数2菜单项id参数3序号参数4设置
        menu.add(1,1,1,"设置");
        SubMenu sub =menu.addSubMenu(1,2,2,"更多");
        sub.add(2,3,1,"添加");
        sub.add(2,4,2,"删除");


        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
           /* case R.id.option1:
                Toast.makeText(this, "option1", Toast.LENGTH_SHORT).show();
                break;
            case R.id.option2:
                Toast.makeText(this, "option2", Toast.LENGTH_SHORT).show();
                break;*/
            case 1:
                Toast.makeText(this, "设置", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                Toast.makeText(this, "更多", Toast.LENGTH_SHORT).show();
                break;
            case 3 :
                Toast.makeText(this, "添加", Toast.LENGTH_SHORT).show();
                break;
            case 4:
                Toast.makeText(this, "删除", Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onOptionsItemSelected(item);
    }

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 应用程序中创建菜单(Menu)可以为用户提供更加丰富和便捷的交互方式。以下是创建 Android 菜单的步骤: 1. 在 res 目录下创建一个名为 menu 的文件夹。 2. 在 menu 文件夹中创建一个 XML 文件,该文件将定义菜单项( MenuItem )和菜单组( MenuGroup )。 3. 在 Activity 中重写 `onCreateOptionsMenu()` 方法,该方法会在创建菜单时被调用。在该方法中使用 `MenuInflater` 加载菜单资源文件并将菜单项添加到菜单中。 4. 重写 `onOptionsItemSelected()` 方法,该方法会在用户选择菜单项时被调用。在该方法中根据菜单项的 ID 执行相应的操作。 以下是一个简单的示例代码: 在 menu 文件夹中创建一个名为 menu_main.xml 的文件,该文件定义了一个名为 menu_main 的菜单组和两个菜单项: ``` <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/menu_main" android:checkableBehavior="single"> <item android:id="@+id/menu_item1" android:title="菜单项1" /> <item android:id="@+id/menu_item2" android:title="菜单项2" /> </group> </menu> ``` 在 Activity 中重写 `onCreateOptionsMenu()` 方法: ``` @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_main, menu); return true; } ``` 在 Activity 中重写 `onOptionsItemSelected()` 方法: ``` @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_item1: // 执行菜单项1的操作 return true; case R.id.menu_item2: // 执行菜单项2的操作 return true; default: return super.onOptionsItemSelected(item); } } ``` 这样就完成了 Android 菜单创建

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值