安卓开发 - 上下文菜单和选项菜单

文章目录

  • 安卓上下文菜单和选项菜单
    • 上下文菜单
      • 预览
        • 演示
        • 布局
      • 1. 创建菜单项
      • 2. 为`TextView`注册上下文菜单
      • 3. 重写`onCreateContextMenu()`方法
      • 4. 重写`onContextItemSelected()`方法
    • 选项菜单
      • 预览
        • 演示
        • 布局
      • 1. 创建菜单项
      • 2. 重写`onCreateOptionsMenu()`方法
      • 3. 重写`onOptionsItemSelected()`方法

安卓上下文菜单和选项菜单

上下文菜单

预览

演示

安卓开发 - 上下文菜单和选项菜单_第1张图片

布局

我们直接拿默认生成的Hello World! TextView 来演示上下文菜单,id为"@+id/textView"

安卓开发 - 上下文菜单和选项菜单_第2张图片

1. 创建菜单项

  1. 在res下新建menu文件夹

    安卓开发 - 上下文菜单和选项菜单_第3张图片
  2. 新建Menu Resource File menu.xml

    安卓开发 - 上下文菜单和选项菜单_第4张图片

    关于菜单项

    每一个标签代表一个菜单项

    <item android:id="@+id/setting" android:title="设置" />
    

    android:id="@+id/setting"代表菜单项的id为setting,android:title="设置"代表菜单项的标题为设置

    安卓开发 - 上下文菜单和选项菜单_第5张图片

2. 为TextView注册上下文菜单

使用registerForContextMenu(View view)来为组件注册上下文菜单

public class MainActivity extends AppCompatActivity {
     

    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
     
        ... ...
        // 2. 为`TextView`注册上下文菜单
        textView = findViewById(R.id.textView);
        registerForContextMenu(textView);
    }
}

3. 重写onCreateContextMenu()方法

该方法可以添加上下文菜单

  1. 快捷键alt+insert,选择Override Methods…

  2. 直接打onCreateContextMenu找到该方法,点击OK

    安卓开发 - 上下文菜单和选项菜单_第6张图片
  3. 在该方法中解析菜单文件

    // 3. 重写`onCreateContextMenu()`方法,添加上下文菜单
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
           
        // 解析菜单文件
        MenuInflater inflater = new MenuInflater(this);
        // 第一个参数就是刚才创建的菜单文件
        inflater.inflate(R.menu.menu, menu);
    }
    

4. 重写onContextItemSelected()方法

各个菜单项被选择时所做的处理(长按)

  1. 同上Override Methods…

  2. 重写该方法,根据选中的菜单项的id(标签的id)自己写相应的代码即可

    // 4. 重写`onContextItemSelected()`方法指定各个菜单项被选择时所做的处理
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
           
        switch (item.getItemId()) {
           
            case R.id.setting:
                Toast.makeText(this, "设置!", Toast.LENGTH_SHORT).show();
                break;
            case R.id.history:
                Toast.makeText(this, "历史记录!", Toast.LENGTH_SHORT).show();
                break;
            case R.id.about:
                Toast.makeText(this, "关于!", Toast.LENGTH_SHORT).show();
                break;
        }
        return true;
    }
    

选项菜单

预览

演示

安卓开发 - 上下文菜单和选项菜单_第7张图片

布局

同上

1. 创建菜单项

使用与上下文菜单相同的菜单项

2. 重写onCreateOptionsMenu()方法

该方法可以添加一个选项菜单

代码与上面差别不大

// 2. 重写`onCreateOptionsMenu()`方法,该方法可以添加一个选项菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
     
    MenuInflater inflater = new MenuInflater(this);
    inflater.inflate(R.menu.menu, menu);
    return super.onCreateOptionsMenu(menu);
}

3. 重写onOptionsItemSelected()方法

各个菜单项被选择时所做的处理

代码与上面差别不大,具体可以自己写

// 3. 重写`onOptionsItemSelected()`方法,指定各个菜单项被选择时所做的处理
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
     
    switch (item.getItemId()) {
     
        case R.id.setting:
            Toast.makeText(this, "设置!", Toast.LENGTH_SHORT).show();
            break;
        case R.id.history:
            Toast.makeText(this, "历史记录!", Toast.LENGTH_SHORT).show();
            break;
        case R.id.about:
            Toast.makeText(this, "关于!", Toast.LENGTH_SHORT).show();
            break;
    }
    return super.onOptionsItemSelected(item);
}

你可能感兴趣的:(安卓,java,android,安卓,android,studio)