题目
在该应用中,活动页面视图根节点为垂直的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)重写创建菜单的方法:
eg:getMenuInflater().inflate(R.menu.opt_menu,menu);
item.getItemId()
以上总结仅适用于个人,更多总结看下面老师的PPT吧

注:所学内容出自https://space.bilibili.com/549342748/channel/seriesdetail?sid=3616542
浙公网安备 33010602011771号