Android中MenuInflater实例
发布日期:2021-08-11 02:51:16 浏览次数:1 分类:技术文章

本文共 2578 字,大约阅读时间需要 8 分钟。

我们知道,LayoutInflater是用来实例化整个布局文件,而MenuInflater是用来实例化Menu目录下的Menu布局文件的。

传统意义上的菜单定义需要Override Activity的onCreateOptionsMenu,然后在里面调用Menu.add把Menu的一个个item加进来,比较复杂。而通过使用MenuInflater可以把Menu的构造直接放在Menu布局文件中,真正实现模型(Model)与视图(View)的分离,程序也看着清爽多了。

下面一个实例是定义四个菜单,并且实现了一个菜单事件, 当我们点击设置(Settind)菜单,进入手机设置状态。

效果图如下:


源代码如下:

/TestMenuInflater/res/menu/options_menu.xml:

[xhtml]
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android">  
  3.     <item   
  4.         android:id="@+id/menu_add"  
  5.         android:title="Add"  
  6.         android:icon="@android:drawable/ic_menu_add"/>  
  7.      <item   
  8.         android:id="@+id/menu_wallaper"  
  9.         android:title="Wallpaper"  
  10.         android:icon="@android:drawable/ic_menu_gallery"/>  
  11.     <item   
  12.         android:id="@+id/menu_search"  
  13.         android:title="Search"  
  14.         android:icon="@android:drawable/ic_search_category_default"/>  
  15.     <item   
  16.         android:id="@+id/menu_setting"  
  17.         android:title="Settings"  
  18.         android:icon="@android:drawable/ic_menu_preferences"/>  
  19. </menu>  

TestMenuInflater.java:

[c-sharp]
  1. package com.android.test;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.view.Menu;  
  6. import android.view.MenuInflater;  
  7. import android.view.MenuItem;  
  8. public class TestMenuInflater extends Activity {  
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.     }  
  14.       
  15.     @Override  
  16.     public boolean onCreateOptionsMenu(Menu menu) {  
  17.         MenuInflater inflater = getMenuInflater();  
  18.         inflater.inflate(R.menu.options_menu, menu);      
  19.         return true;  
  20.     }  
  21.       
  22.     @Override  
  23.     public boolean onOptionsItemSelected(MenuItem item) {  
  24.         switch (item.getItemId()) {  
  25.         case R.id.menu_add:  
  26.             break;  
  27.         case R.id.menu_wallaper:  
  28.             break;  
  29.         case R.id.menu_search:  
  30.             break;  
  31.         case R.id.menu_setting:  
  32.             showSettings();  
  33.             break;  
  34.         }  
  35.         return super.onOptionsItemSelected(item);  
  36.     }  
  37.       
  38.       
  39.     private void showSettings(){  
  40.           
  41.      final Intent settings = new Intent(android.provider.Settings.ACTION_SETTINGS);  
  42.      settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |  
  43.              Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);  
  44.               
  45.      startActivity(settings);  
  46.    }  
  47. }  

几点说明:

  1. 与LayoutInflater相比,MenuInflater的用法简单多了。首先,MenuInflater获取方法只有一种:Activity.getMenuInflater();其次,MenuInflater.inflater(int menuRes,Menu menu)(这里不代表inflater就是static方法,可以这样调用,只是为了描述方便)的返回值是void型,这就决定了MenuInflater.inflater后就没有后续操作了。这说明通过这种方式把Menu布局文件写好后就不能在程序中动态修改了,而不像LayoutInflater.inflater那样,返回值是View型,可以进行后续的进一步操作。另外,MenuInflater只有一个void inflater(int menuRes,Menu menu)非构造方法。
  2. Menu布局文件中的icon资源是Android自带的,通过“@android:drawable/"获取到。
  3. 另外,Android也有类似的功能。具体参考源码:/packages/apps/Launcher/src/com/android/launcher/Launcher.java

转载于:https://www.cnblogs.com/sharecenter/p/5621109.html

转载地址:https://blog.csdn.net/weixin_30609287/article/details/98615965 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【 imgproc 模块. 图像处理】腐蚀与膨胀(Eroding and Dilating)
下一篇:(转载)CString,string,char*的综合比较

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.200.74.241]2022年05月27日 16时39分26秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章

tansig用计算机怎么按,使用并行和 GPU 计算的神经网络 2019-08-20 03:55:36
电大英语计算机报名时间2015,电大-计算机专业英语 2019-08-20 03:55:35
杭州师范大学计算机科学与技术怎么样,杭州师范大学怎么样 王牌专业有哪些... 2019-08-20 03:55:34
html怎么混合颜色,CSS3 多色混合背景 2019-08-20 03:55:34
html点击向下滚动,单击滚动条的滚动箭头时 2019-08-20 03:55:33
三星 Android9,三星宣布:2019年1月推送首批Android9.0正式版,但是中国除外 2019-08-20 03:55:33
html把password纵向排列,password.html 2019-08-20 03:55:32
html中div展开,html – 如何在悬停时展开div及其内容? 2019-08-20 03:55:32
html5 摇骰子游戏,HTML5+JavaScript实现掷骰子游戏代码 2019-08-20 03:55:31
html5字号的大小,webapp字号大小跟随系统字号大小缩放的示例代码 2019-08-20 03:55:31
android sdk samples,GitHub - tencentyun/qcloud-sdk-android-samples: 腾讯云服务Android SDK samples... 2019-08-20 03:55:30
android 5.0 miui7,小米官网公布MIUI7为啥不使用Android5.0 2019-08-20 03:55:30
android版本适配11,零时差适配安卓11!ColorOS 11升级公测版体验:丝滑顺畅 2019-08-20 03:55:29
win10部署android,atxserver2部署--基于Windows10系统(Android) 2019-08-20 03:55:29
android点击事件内容改变,android输入框内容改变的监听事件实例 2019-08-20 03:55:28
华为鸿蒙中标麒麟,华为鸿蒙OS短时间内威胁不到麒麟操作系统和统信UOS系统 2019-08-20 03:55:28
鸿蒙手机品牌,你好,鸿蒙!首个第三方接入鸿蒙品牌出现,华为再也不孤单了!... 2019-08-20 03:55:28
android ontouchevent 坐标,android处理触摸事件(touchEvent)的详细流程 2019-08-20 03:55:27
mips-mti-gnu-linux,c – 关于MIPS的pthreads中的Segfault 2019-08-20 03:55:27
c语言int mark,C语言考前冲刺题 2019-08-20 03:55:26