android中选中菜单的显示跳转和隐式跳转的实例介绍

2013-10-29  来源:本站原创  分类:Android  人气:2 

android中选中菜单的显示跳转和隐式跳转的实例介绍,需要的朋友可以参考一下

查了好多资料,现发还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

简介

android供给了三种菜单类型,分别为options menu,context menu,sub menu。

options menu就是通过按home键来表现,context menu需要在view上按上2s后表现。这两种menu都有可以参加子菜单,子菜单不能种不能嵌套子菜单。options menu最多只能在幕屏最下面表现6个菜单项选,称为iconmenu,icon menu不能有checkable项选。多于6的菜单项会以more icon menu来调出,称为expanded menu。options menu通过activity的onCreateOptionsMenu来生成,这个函数只会在menu第一次生成时用调。任何想转变options menu的设法只能在onPrepareOptionsMenu来现实,这个函数会在menu表现前用调。onOptionsItemSelected 用来理处选中的菜单项。

context menu是跟某个体具的view绑定在一起,在activity种用registerForContextMenu来为某个view注册context menu。context menu在表现前都市用调onCreateContextMenu来生成menu。onContextItemSelected用来理处选中的菜单项。

android还供给了对菜单项行进分组的功能,可以把似相功能的菜单项分红同一个组,这样以可就通过用调setGroupCheckable,setGroupEnabled,setGroupVisible来设置菜单属性,而无须独单设置。

Options Menu

Notepad中使用了options menu和context menu两种菜单。首先来看生成options menu的onCreateOptionsMenu函数。


menu.add(0, MENU_ITEM_INSERT, 0, R.string.menu_insert) .setShortcut('3', 'a') .setIcon(android.R.drawable.ic_menu_add);



这是一个标准的插入一个菜单项的方法,菜单项的id为MENU_ITEM_INSERT。有意思的是下面这几句代码:

复制代码 代码如下:


Intent intent = new Intent(null, getIntent().getData()); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, new ComponentName(this, NotesList.class), null, intent, 0, null);



这到底有何处用呢?其实这是一种态动菜单技巧(也有点像件插机制),若某一个activity,其类型是”android.intent.category.ALTERNATIVE”,据数是”vnd.android.cursor.dir/vnd.google.note”的话,系统就会为这个activity加增一个菜单项。在androidmanfest.xml中查看后现发,没有一个activity符合条件,所以这段代码并没有态动添加出任何一个菜单项。

为了验证上述分析,我们可以来做一个验实,在androidmanfest.xml中行进修改,看否是会态动生成出菜单项。

验实一

首先我们来建创一个新的activity作为目标activity,名为HelloAndroid,没有什么功能,就是表现一个界面。

复制代码 代码如下:


public class HelloAndroid extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main); } }



它所对应的局布界面XML文件如下:

复制代码 代码如下:


<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/TextView01"/> <Button android:id="@+id/Button01" android:layout_height="wrap_content" android:layout_width="fill_parent" android:text="@string/txtInfo"></Button> </LinearLayout>



然后修改androidmanfest.xml,参加下面这段配置,让HelloAndroid满意上述两个条件:

复制代码 代码如下:


<activity android:name="HelloAndroid" android:label="@string/txtInfo"> <intent-filter> <action android:name="com.android.notepad.action.HELLO_TEST" /> <category android:name="android.intent.category.ALTERNATIVE"/> <data android:mimeType="vnd.android.cursor.dir/vnd.google.note" /> </intent-filter> </activity>



好了,行运下试试,哎,还是没有态动菜单项参加呀!怎么回事呢?查看代码后现发,原来是onPrepareOptionsMenu弄的鬼!这个函数在onCreateOptionsMenu后之行运,下面这段代码中,由于Menu.CATEGORY_ALTERNATIVE是指向同一个组,所以把onCreateOptionsMenu中设置的菜单项给盖覆掉了,而由于onPrepareOptionsMenu没有给Menu.CATEGORY_ALTERNATIVE附新值,故Menu.CATEGORY_ALTERNATIVE还是为空。

复制代码 代码如下:


Intent intent = new Intent(null, uri); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0,items);



好的,那我们临时把下面这几句给释注掉,当然,也可以不释注这几句,在onCreateOptionsMenu中改groupid号,即将Menu.CATEGORY_ALTERNATIVE为改Menu.first,其他的也行,但意注不要为改menu.none,这样会盖覆掉。

复制代码 代码如下:


menu.add(0, MENU_ITEM_INSERT, 0, R.string.menu_insert) .setShortcut('3', 'a') .setIcon(android.R.drawable.ic_menu_add);



添加的菜单。因为menu.none也为0。行运后以可就看到态动菜单出来了!

android中选中菜单的显示跳转和隐式跳转的实例介绍

下面这个options menu是在NotesList界面上没有日记列表选中的情况下生成的,若先选中一个日记,然后再点”menu”,则生成的options menu是下面这样的:

android中选中菜单的显示跳转和隐式跳转的实例介绍

每日一道理
一个安静的夜晚,我独自一人,有些空虚,有些凄凉。坐在星空下,抬头仰望美丽天空,感觉真实却由虚幻,闪闪烁烁,似乎看来还有些跳动。美的一切总在瞬间,如同“海市蜃楼”般,也只是刹那间的一闪而过,当天空变得明亮,而这星星也早已一同退去……

哎,又态动加增了两个菜单项”Edit note”和”Edit title”,这又是如何态动参加的呢?这就是onPrepareOptionsMenu的劳功了。

复制代码 代码如下:


Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId());



首先获得选中的日记(若没有择选,则uri为空)

复制代码 代码如下:


Intent[] specifics = new Intent[1]; specifics[0] = new Intent(Intent.ACTION_EDIT, uri); MenuItem[] items = new MenuItem[1];



然后为选中的日记建创一个intent,操纵类型为Intent.ACTION_EDIT,据数为选中日记的URI.于是会为选中的日记建创一个”Edit note”菜单项。

复制代码 代码如下:


Intent intent = new Intent(null, uri); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, items);



这几句和下面onCreateOptionsMenu函数中似类,于用态动加增菜单项,若某一个activity,其类型是”android.intent.category.ALTERNATIVE”,据数是”vnd.android.cursor.item/vnd.google.note”的话,系统就会为这个activity加增一个菜单项。在androidmanfest.xml中查看后现发,TitleEditor这个activity符合条件,于是系统就为TitleEditor这个activity态动添加一个菜单项”Edit title”。

复制代码 代码如下:


else { menu.removeGroup(Menu.CATEGORY_ALTERNATIVE); }



若日记列表为空,则从菜单中除删组号为Menu.CATEGORY_ALTERNATIVE的菜单项,只剩下”Add note”菜单项。

理处“选中菜单项”事件

菜单项选中事件的理处非常简略,通过onOptionsItemSelected来成完,这里只是简略地用调 startActivity(new Intent(Intent.ACTION_INSERT, getIntent().getData()));这个intent的操纵类型为Intent.ACTION_INSERT,据数为日记列表的URI,即”content:// com.google.provider.NotePad/notes”

复制代码 代码如下:


@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_ITEM_INSERT: // Launch activity to insert a new item startActivity(new Intent(Intent.ACTION_INSERT, getIntent().getData())); return true; } return super.onOptionsItemSelected(item); }



Context Menu

下面分析另一种菜单---上下文菜单,这通过重载onCreateContextMenu函数现实。首先确认已选中了日记列表中的一个日记,若没择选,则直接返回。Cursor指向选中的日记项。

复制代码 代码如下:


Cursor cursor = (Cursor) getListAdapter().getItem(info.position); if (cursor == null) { // For some reason the requested item isn't available, do nothing return; }



然后,设置上下文菜单的标题为日记标题

复制代码 代码如下:


// Setup the menu header menu.setHeaderTitle(cursor.getString(COLUMN_INDEX_TITLE));


最后为上下文菜单加增一个菜单项

复制代码 代码如下:


// Add a menu item to delete the note menu.add(0, MENU_ITEM_DELETE, 0, R.string.menu_delete);


对于上下文菜单项选中的事件理处,是通过重载onContextItemSelected现实的。

复制代码 代码如下:


switch (item.getItemId()) { case MENU_ITEM_DELETE: { // Delete the note that the context menu is for Uri noteUri = ContentUris.withAppendedId(getIntent().getData(), info.id); getContentResolver().delete(noteUri, null, null); return true; } } return false; }


对于日记的除删,首先用调ContentUris.withAppendedId(getIntent().getData(), info.id);来接拼出待除删日记的URI.然后getContentResolver().delete(noteUri, null, null);用调层下的Content Provider去除删此日记。

验实二

来做个简略验实,在上述代码基础上加增一个上下文菜单项。首先在onCreateContextMenu函数中加增一个上下文菜单项:

复制代码 代码如下:


menu.add(0,MENU_ITEM_INSERT,0,R.string.menu_insert);


然后为其在onContextItemSelected函数中加增一个理处进程:

复制代码 代码如下:


case MENU_ITEM_INSERT: { new AlertDialog.Builder(this).setIcon(R.drawable.app_notes) .setTitle(R.string.app_name).setMessage(R.string.error_message).setPositiveButton(R.string.button_ok, new OnClickListener(){ public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub } }).show(); return true; }


验实结果如下:
android中选中菜单的显示跳转和隐式跳转的实例介绍

android中选中菜单的显示跳转和隐式跳转的实例介绍

相关文章
  • android中选中菜单的显示跳转和隐式跳转的实例介绍 2013-10-29

    android中选中菜单的显示跳转和隐式跳转的实例介绍,需要的朋友可以参考一下 查了好多资料,现发还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 简介 android供给了三种菜单类型,分别为options menu,context menu,sub menu. options menu就是通过按home键来表现,context menu需要在view上按上2s后表现.这两种menu都有可以参加子菜单,子菜单不能种不能嵌套子菜单.options menu

  • Android显式启动与隐式启动Activity的区别介绍 2014-10-08

    为什么要写显式启动与隐式启动Activity,Android的Acitivity启动大致有两种方式:显式启动与隐式启动,下面分别介绍 前段时间立志坚持写博客,但是发现自己的积累的确不多,于是假期泡了泡图书馆,读了一些很有价值的文章.收获颇多,今天的文章分享为主,共同学习. 为什么要写显式启动与隐式启动Activity.这源于自己的一次面试,被Baidu工程师问道,但是后来觉得自己回答的不好,废话少说,进入正题. 如题,Android的Acitivity启动大致有两种方式:显式启动与隐式启动.下面

  • Android中应用界面主题Theme使用方法和页面定时跳转应用 2014-10-26

    在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status Bar是否可见来分类,感兴趣的朋友可以了解下哈 主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格.在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status Bar是否可见来分类: android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能

  • 动态链接库的显示加载和隐式加载的区别 2013-11-20

    两种方法对于你的程序调用动态库时没有任何区别,只是你在编程时,步骤是不一样的.显式调用麻烦了点,但可以没有相应的lib库:隐式调用,使用起来比较简单,有函数的声明就可以了,但必须有lib库. 在VC中两种方式的具体方法: 一.动态库的隐示调用: 在 VC 工程中直接链接静态输入库XXX.lib,然后即可像调用其它源文件中的函数一样调用DLL中的函数了. 二.动态库的显式调用: 显式调用动态库步骤: 1.创建一个函数指针,其指针数据类型要与调用的 DLL 引出函数相吻合. 2.通过 Win32 A

  • android中选中,获得焦点的,点击区别 2013-08-03

    android:state_selected是选中 android:state_focused是获得焦点 android:state_pressed是点击 android:state_enabled是设置是否响应事件,指所有事件 选中 = 获取焦点 + 点击

  • ubuntu13.10中eclipse菜单无法显示解决方法 2013-11-24

    1)首先,关闭Eclipse和做到这一点: sudo gedit /usr/share/applications/eclipse.desktop 2)在这个文件的末尾只是复制粘贴此线 Exec=env UBUNTU_MENUPROXY=0 /your/path/to/eclipse/binary 打开Eclipse,在Eclipse的菜单将开始出现. (适用于在后期版本的Ubuntu 12.04)

  • 解析在Android中为TextView增加自定义HTML标签的实现方法 2014-03-10

    本篇文章是对在Android中为TextView增加自定义HTML标签的方法进行了详细的分析介绍.需要的朋友参考下 Android中的TextView,本身就支持部分的Html格式标签.这其中包括常用的字体大小颜色设置,文本链接等.使用起来也比较方便,只需要使用Html类转换一下即可.比如: textView.setText(Html.fromHtml(str)); 然而,有一种场合,默认支持的标签可能不够用.比如,我们需要在textView中点击某种链接,返回到应用中的某个界面,而不仅仅是网络

  • Android中使用ListView实现漂亮的表格效果 2014-06-22

    这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下 在这里我们要使用Android ListView来实现显示股票行情,效果图如下,红色表示股票价格上涨,绿色表示股票价格下跌. 第一步.定义color.xml如下: <?xml version="1.0" encoding="utf-8"?> <resources> <color name="

  • 如何在Android中实现渐显按钮的左右滑动效果 2014-08-16

    本篇文章是对在Android中实现渐显按钮的左右滑动效果进行了详细的分析介绍,需要的朋友参考下 先看下运行效果: 程序结构: MainActivity文件中代码: package com.android.buttonpageflipper; import android.app.Activity; import android.graphics.PixelFormat; import android.os.Bundle; import android.os.Handler; import and

  • 解析android中的dip,dp,px,sp和屏幕密度 2014-11-10

    本篇文章是对android中的dip,dp,px,sp和屏幕密度进行了详细的分析介绍,需要的朋友参考下 1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. 这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示.在屏幕密度为160的显示屏上,1dip=1px,有时候可能你的屏幕分辨率很大如

  • js 实现菜单上下显示附效果图 2014-01-25

    菜单上下显示的实现方法有很多,在本文将为大家介绍下使用js是如何实现的,需要的朋友不要错过 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> &

  • C# 接口的隐式与显示实现及适应场景 2014-11-24

    以前在用到接口时,从来没注意到接口分为隐式实现与显示实现.昨天在浏览博客时看到相关内容,现在根据自己的理解记录一下,方便日后碰到的时候温习温习,需要的朋友可以了解下 以前在用到接口时,从来没注意到接口分为隐式实现与显示实现.昨天在浏览博客时看到相关内容,现在根据自己的理解记录一下,方便日后碰到的时候温习温习. 通俗的来讲,"显示接口实现"就是使用接口名称作为方法名的前缀;而传统的实现方式称之为:"隐式接口实现".费话不说,例子如下: interface IAnima

  • Android界面设计(APP设计趋势 左侧隐藏菜单右边显示content) 2014-09-28

    这文章讲述了2013年未来的移动APP设计趋势,感觉挺有道理的:Android界面设计实现左侧隐藏菜单右边显示content,感兴趣的你可以了解下啊,希望本文对你的APP设计提高有所帮助哦 相关文章 android popwindow实现左侧弹出菜单层 http://www.jb51.net/article/33533.htm 移动App设计的13大精髓 http://www.jb51.net/article/33534.htm 这文章讲述了2013年未来的移动APP设计趋势,感觉挺有道理的.w

  • android中使用PopupWindow实现弹出窗口菜单 2014-04-15

    结合上篇android中使用ViewPager实现图片拖动,我们实现了点击"帮助"按钮的功能,这一篇则是接着上一篇,让我们一起来完成"我的"按钮的功能,这一功能,则是使用PopupWindow来实现弹出菜单. 老习惯,先上效果图: 图一 图二 再上项目结构图,如图: 从项目结构图可见,我们这里并没有新建新的Activity,因为"我的"按钮和"帮助"是在一个页面的,所以,我们只需新建一个效果图中的,弹出菜单的布局文件即可,即p

  • 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法 2013-12-22

    本篇文章对android中隐藏与显示软键盘以及不自动弹出键盘的方法进行了分析介绍.需要的朋友参考下 1.//隐藏软键盘 ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity.this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 2.//显示

  • android 中去掉窗口全屏显示的简单方法 2014-01-05

    android 中去掉窗口全屏显示的简单方法,需要的朋友可以参考一下 //去掉窗口 requestWindowFeature(Window.FEATURE_NO_TITLE);(一定要放在setContentView(R.layout.main)的前面) //全屏显示 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

  • Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享 2014-02-01

    Android自定义View设定到FrameLayout布局中实现多组件显示的方法 分享,需要的朋友可以参考一下 如果想在自定义的View上面显示Button 等View组件需要完成如下任务 1.在自定义View的类中覆盖父类的构造(注意是2个参数的) public class MyView2 extends View{ public MyView2(Context context,AttributeSet att) {super(context,att); } public void onDr

  • Android中Activity跳转的创建步骤总结 2014-07-19

    这篇文章主要介绍了Android中Activity跳转的创建步骤总结,本文详细的讲解了从工程创建到跳转Activity的实现完整过程,需要的朋友可以参考下 一.创建工程 file->new->android application依次填入应用名称.工程名.包名 在工程目录下找到src/com.example.helloworld MainActivity.java 二.添加代码 package com.example.helloworld; import android.app.Activit

  • Android中监听软键盘显示状态实现代码 2014-10-27

    这篇文章主要介绍了Android中监听软键盘显示状态实现代码,本文直接给出核心实现代码,需要的朋友可以参考下 /**监听软键盘状态 * @param activity * @param listener */ public static void addOnSoftKeyBoardVisibleListener(Activity activity, final OnSoftKeyBoardVisibleListener listener) { final View decorView = act

  • Android中EditText和AutoCompleteTextView设置文字选中颜色方法 2014-11-29

    这篇文章主要介绍了Android中EditText和AutoCompleteTextView设置文字选中颜色方法,本文给出了效果图和实现代码,需要的朋友可以参考下 EditText和AutoCompleteTextView设置文字选中颜色 大多数Android Rom上,文本选择的背景色都是很好看的鲜绿色, 但是在某些垃圾的三星手机上,居然是蓝色,令人恶心反感,其实完全可以通过程序来修改,文本的默认选中背景色. 所用API解释 android:textColorHighlight Color o