Android期末复习4-1:使用选项菜单OptionsMenu(点击选项型菜单)

题目

在该应用中,活动页面视图根节点为垂直的LinearLayout,在布局中依次放置1个TextView,显示个人信息;1个TextView(id为tv_result),显示OptionsMenu(选项菜单)的选中结果。OptionsMenu在应用的动作栏右侧,点击OptionsMenu,弹出菜单项。在本例中,仅演示OptionsMenu的使用方法,功能比较简单,tv_result显示被选中菜单项的结果。OptionsMenu菜单中,“增加”菜单项以图标的形式直接显示在动作栏(或称标题栏、工具栏)中,“修改”和“删除”菜单项则隐藏在菜单中,通过点击OptionsMenu图标,弹出所隐藏的菜单项。

实现效果

步骤

1.新建项目,更改布局文件为my_main.xml

删除app/re/layout/activity_main.xml文件,新建自己的my_main.xml布局文件

其中Root Element设置为LinearLayout,改MainActivity.java中的setContentView(R.layout.my_main)

2.对my_main.xml操作

拖入两个TextView

3.新建菜单

项目模版默认是没有菜单项的,需要手动创建,右键点击项目列表中的res->New->Android Resource File,设置文件名,Resource Type设置为Menu,点击OK即可

 4.对opt_menu.xml操作

 其中添加icon时会弹出窗口,操作如下:

同理,再增加两个Menu Item,分别为修改、删除 

 代码展示(有注释)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <!--项目模版默认是没有菜单项的,需要手动创建,右键点击项目列表中的res->New->Android Resource File,设置文件名,Resource Type设置为Menu,点击OK即可-->
    <!--title显示菜单项文本-->
    <!--icon菜单项的图标,在Design界面可以选择,但是需要与app:showAsAction配合使用-->
    <!--app:showAsAction="always"表示在动作栏以图标形式显示菜单项,报错按alt+ctrl就行-->
    <item
        android:id="@+id/opt_add"
        android:icon="@android:drawable/ic_menu_add"
        android:title="增加"
        app:showAsAction="always" />

    <item
        android:id="@+id/opt_modify"
        android:title="修改" />
    <item
        android:id="@+id/opt_delete"
        android:title="删除" />
</menu>

 5.MainActivity.java部分

package com.example.zdl_task4_1;

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

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    TextView tv;//必须声明在onCreate()外部,使之成为类的成员变量,而不是方法中的局部变量,因为类的其他方法会用到
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_main);
        tv=findViewById(R.id.tv_result);//找TextView的id
    }
    //onCreateOptionsMenu()应用首次生成选项菜单时被调用,之后不再被调用,适合生成静态菜单
    //补充:onPrepareOptionSelected()每次点击选项菜单时被调用,适合生成动态内容的菜单项
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 将res/menu/opt_menu.xml菜单文件填充到menu对象上
        // 方法1:获得菜单填充器get方法,再调用其inflate填充方法
        getMenuInflater().inflate(R.menu.opt_menu,menu);
        // 方法2:创建菜单填充器对象,传入getApplicationContext方法获得应用上下文,后调用inflate填充方法
        //new MenuInflater(getApplicationContext()).inflate(R.menu.opt_menu,menu);
        return super.onCreateOptionsMenu(menu);
    }
    //设置点击菜单后的效果,通过onOptionsItemSelected()方法实现
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        String s="";
        switch (item.getItemId()){
            case R.id.opt_add:
                s="增加";
                break;
            case R.id.opt_modify:
                s="修改";
                break;
            case R.id.opt_delete:
                s="删除";
                break;
        }
        tv.setText(s);//在TextView中显示
        return super.onOptionsItemSelected(item);
    }
}

 重点总结

1.记住怎么创建菜单的xml文件(需要新建),怎么给菜单设置图标(icon属性,搭配showAsAction=always使用)

2.记住处理菜单的两个步骤:

(1)重写创建菜单的方法:

onCreateOptionsMenu(),首次生成选项菜单时被调用,之后不再被调用,适合生成静态菜单

onPrepareOptionSelected(),每次点击选项菜单时被调用,适合生成动态内容的菜单项

还要记住将res/menu/ctx_menu.xml菜单文件填充到menu对象上的方法,记住一种即可,我较常用方法1,先获得菜单填充器getMenuInflater()方法,再调用其inflate填充方法

eg:getMenuInflater().inflate(R.menu.opt_menu,menu);

(2)重写选项菜单事件的响应方法,设置菜单点击后的效果

onOptionsItemSelected()

还要记住其中获得对应菜单项id的方法

item.getItemId()

 以上总结仅适用于个人,更多总结看下面老师的PPT吧

注:所学内容出自https://space.bilibili.com/549342748/channel/seriesdetail?sid=3616542

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值