摸鱼学Android 二十(菜单)

UI控件之十 Menu(菜单)

1 OptionMenu(选项菜单)

1.1 说明

最常见的菜单,通过Menu键来调用。

1.2 使用

  1. 重写onCreateOptionsMenu()方法,完成菜单初始化
  2. 重写onOptionsItemSelected()方法,完成事件处理

1.3 实例

  1. 创建菜单,点击对应项改变文本颜色
public class MainActivity extends AppCompatActivity {

    //1.定义不同颜色的菜单项的标识:
    final private int RED = 110;
    final private int GREEN = 111;
    final private int BLUE = 112;
    final private int YELLOW = 113;
    final private int GRAY= 114;
    final private int CYAN= 115;
    final private int BLACK= 116;

    private TextView tv_test;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_test = (TextView) findViewById(R.id.textView);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(1,RED,4,"红色");
        menu.add(1,GREEN,2,"绿色");
        menu.add(1,BLUE,3,"蓝色");
        menu.add(1,YELLOW,1,"黄色");
        menu.add(1,GRAY,5,"灰色");
        menu.add(1,CYAN,6,"蓝绿色");
        menu.add(1,BLACK,7,"黑色");
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch (id){
            case RED:
                tv_test.setTextColor(Color.RED);
                break;
            case GREEN:
                tv_test.setTextColor(Color.GREEN);
                break;
            case BLUE:
                tv_test.setTextColor(Color.BLUE);
                break;
            case YELLOW:
                tv_test.setTextColor(Color.YELLOW);
                break;
            case GRAY:
                tv_test.setTextColor(Color.GRAY);
                break;
            case CYAN:
                tv_test.setTextColor(Color.CYAN);
                break;
            case BLACK:
                tv_test.setTextColor(Color.BLACK);
                break;
        }
        return super.onOptionsItemSelected(item);
    }
}

2.运行App
在这里插入图片描述

2 ContextMenu(上下文菜单)

2.1 说明

长按View出现的菜单。

2.2 使用

  1. 重写onCreateContextMenu()方法,完成菜单初始化
  2. 使用registerForContextMenu()方法,为view组件注册上下文菜单
  3. 重写onContextItemSelected()方法,完成事件处理

2.3 实例

复用上面的代码

  1. 创建上下文菜单资源文件context_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 定义一组单选按钮 -->
    <!-- checkableBehavior的可选值由三个:single设置为单选,all为多选,none为普通选项 -->
    <!-- 将字符串定义在strings.xml中是个好习惯 -->
    <group android:checkableBehavior="none">
        <item android:id="@+id/blue" android:title="蓝色"/>
        <item android:id="@+id/green" android:title="绿色"/>
        <item android:id="@+id/red" android:title="红色"/>
    </group>
</menu>
  1. 创建上下文菜单,以及为textView注册上下文菜单
	@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_test = (TextView) findViewById(R.id.textView);

        registerForContextMenu(tv_test);
    }

    @Override
    //重写上下文菜单的创建方法
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        MenuInflater inflator = new MenuInflater(this);
        inflator.inflate(R.menu.context_menu, menu);
        super.onCreateContextMenu(menu, v, menuInfo);

        registerForContextMenu(tv_test);
    }

    //上下文菜单被点击是触发该方法
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.blue:
                tv_test.setTextColor(Color.BLUE);
                break;
            case R.id.green:
                tv_test.setTextColor(Color.GREEN);
                break;
            case R.id.red:
                tv_test.setTextColor(Color.RED);
                break;
        }
        return true;
    }
  1. 运行App,长按文本
    在这里插入图片描述

3 SubMenu(子菜单)

3.1 说明

子菜单即在菜单中又嵌套一层菜单。

3.2 使用

  • 和上下文菜单用法一致,区别在于后者是2层< menu >
  • 也可以使用menu.addSubMenu()方法进行子菜单的添加,还需另外再subMenu.add()方法添加菜单项

3.3 实例

复用上面的代码

  1. 添加子菜单和菜单项
@Override
    //重写上下文菜单的创建方法
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        MenuInflater inflator = new MenuInflater(this);
        inflator.inflate(R.menu.context_menu, menu);

        SubMenu file = menu.addSubMenu("文件");
        file.add("文件1");
        file.add("文件2");
        file.add("文件3");

        super.onCreateContextMenu(menu, v, menuInfo);
    }
  1. 运行App,长按文本,可以看到文件选项(有个小三角),点进去显示:
    在这里插入图片描述

4 PopupMenu(弹出式菜单)

4.1 说明

类似PopupWindow,菜单选项可以来自Menu资源。

4.2 使用

  1. 构造函数创建菜单
  2. 菜单初始化以及点击事件

4.3 实例

  1. 创建菜单资源menu_pop.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/option1" android:title="选项1" />
    <item android:id="@+id/option2" android:title="选项2" />
</menu>
  1. 创建显示菜单方法
    public void showPopMenu(View view) {
        PopupMenu popup = new PopupMenu(MainActivity.this, view);
        popup.getMenuInflater().inflate(R.menu.menu_pop, popup.getMenu());
        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()){
                    case R.id.option1:
                        Toast.makeText(MainActivity.this,"你点了选项1~",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.option2:
                        Toast.makeText(MainActivity.this,"你点了选项2~",
                                Toast.LENGTH_SHORT).show();
                        break;
                }
                return true;
            }
        });
        popup.show();
    }
  1. 新增按钮,绑定上面方法
  2. 运行App,点击按钮
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值