题目

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

实现效果

 步骤

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

删除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项,分别为修改、删除,不用实现icon的功能

 代码展示(有注释):

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

5.MainActivity.java部分

 1 package com.example.zdl_task4_1;
 2 
 3 import androidx.annotation.NonNull;
 4 import androidx.appcompat.app.AppCompatActivity;
 5 
 6 import android.os.Bundle;
 7 import android.view.Menu;
 8 import android.view.MenuInflater;
 9 import android.view.MenuItem;
10 import android.widget.TextView;
11 
12 public class MainActivity extends AppCompatActivity {
13     TextView tv;//必须声明在onCreate()外部,使之成为类的成员变量,而不是方法中的局部变量,因为类的其他方法会用到
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.my_main);
18         tv=findViewById(R.id.tv_result);//找TextView的id
19     }
20     //onCreateOptionsMenu()应用首次生成选项菜单时被调用,之后不再被调用,适合生成静态菜单
21     //补充:onPrepareOptionSelected()每次点击选项菜单时被调用,适合生成动态内容的菜单项
22     @Override
23     public boolean onCreateOptionsMenu(Menu menu) {
24         // 将res/menu/opt_menu.xml菜单文件填充到menu对象上
25         // 方法1:获得菜单填充器get方法,再调用其inflate填充方法
26         getMenuInflater().inflate(R.menu.opt_menu,menu);
27         // 方法2:创建菜单填充器对象,传入getApplicationContext方法获得应用上下文,后调用inflate填充方法
28         //new MenuInflater(getApplicationContext()).inflate(R.menu.opt_menu,menu);
29         return super.onCreateOptionsMenu(menu);
30     }
31     //设置点击菜单后的效果,通过onOptionsItemSelected()方法实现
32     @Override
33     public boolean onOptionsItemSelected(@NonNull MenuItem item) {
34         String s="";
35         switch (item.getItemId()){
36             case R.id.opt_add:
37                 s="增加";
38                 break;
39             case R.id.opt_modify:
40                 s="修改";
41                 break;
42             case R.id.opt_delete:
43                 s="删除";
44                 break;
45         }
46         tv.setText(s);//在TextView中显示
47         return super.onOptionsItemSelected(item);
48     }
49 }

重点总结

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

posted on 2023-11-17 00:55  WINTER1208  阅读(68)  评论(0)    收藏  举报