查了好多资料,现发还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!
简介
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。行运后以可就看到态动菜单出来了!
下面这个options menu是在NotesList界面上没有日记列表选中的情况下生成的,若先选中一个日记,然后再点”menu”,则生成的options menu是下面这样的:
每日一道理
一个安静的夜晚,我独自一人,有些空虚,有些凄凉。坐在星空下,抬头仰望美丽天空,感觉真实却由虚幻,闪闪烁烁,似乎看来还有些跳动。美的一切总在瞬间,如同“海市蜃楼”般,也只是刹那间的一闪而过,当天空变得明亮,而这星星也早已一同退去……
哎,又态动加增了两个菜单项”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;
}
验实结果如下:
相关推荐:
SEO总计:如何通过SEO优化实现网站流量和排名的飞跃,三元桥网站优化
SEO每日:提高网站流量的秘密武器,助你脱颖而出,seo优化和排名技巧
ChatGPT为什么打不开?背后原因与解决方案,慧ai写作
ChatGPT恢复正常使用时间,提升你的工作与生活效率,联想电脑AI0510
SEO武汉:如何提升武汉地区网站的搜索引擎排名,景区网站建设费用
为什么seo吸引人,为什么seo吸引人呢 ,ai路径查找器绘制树
seo简报什么意思,seo工作汇报 ,万花筒 ai
求一个AI软件,彻底改变你的工作与生活!
ChatGPT网站突然不能用了?如何快速解决这个问题,让你重新畅享AI对话!,ai新建多个画板
SEO发明:引领数字时代营销革命的力量,速卖通外贸推广网站
SEO网络营销:如何通过精准优化提升品牌价值,青州建设网站电话
SEO分类中内部优化的有:让你的网站脱颖而出!,by ai
SEO更多-让你的企业站点在搜索引擎中脱颖而出,如何结交seo大神
AI免费生成:释放创造力的秘密武器
今时CMS:引领数字化转型的智慧之选,河南seo优化网站联系方式
企业如何借助SEO咨询实现精准流量引爆,助力业绩提升,立刻推广的旅游线下营销
SEO要点:提升网站排名的核心技巧与策略,福田市网站建设推广费用
seo需要买什么,seo需要考虑什么 ,ai做表头
Bing学术搜索结果不显示时间?如何解决这一问题,提升学术研究效率!,ai怎么参考线
SEO元素-提升网站排名的核心要素,推广分成网站有哪些
seo用到什么软件,做seo需要用到什么软件 ,皮皮ai
seo站内链接有什么作用,seo中网站内链的作用 ,781900ai
SEO收费如何选择合适的SEO服务,提升网站排名并增加曝光度,做网站优化哪家实惠
seo灰帽是什么,灰帽是指什么 ,ai绘画六边形
SEO优化工具优势:提升网站排名,带来流量和转化的秘密武器,ai圆形造字
SEO确实是企业增长的关键,这些技巧让你走在行业前沿,山东网站建设信息
ChatGPT为什么网址打不开?原因分析与解决方法,文档审核ai
seo能解决什么问题,seo会遇到哪些问题 ,挚爱花嫁ai
seo需要学习什么语言,做seo需要懂什么技术 ,ai软件制作教程
Bing搜索不能预览了?搜索引擎的新变革与挑战,ai制作一张窗花
SEO师:如何在数字时代为企业赢得流量与销量,十堰网站关键词优化教程
《命运交错的轨迹:小说背后的无尽魅力》,seo优化huifachina
SEO自己:打造属于你的数字营销利器,微信裂变营销推广软件
ChatGPT手机下载后打不开?可能是这些问题导致的,解决方法在这里!,孤城ai动画
SEO作用:提升网站流量与品牌曝光的秘密武器,美容网站联盟平台推广
SEO找出网站流量提升的终极策略,带你走向搜索引擎巅峰!,朝阳模板网站建设价格
为什么选择收录网站是企业在线营销的必备策略,全网营销与推广
ChatGPT内部HTTP接口文档-为开发者提供高效便捷的AI服务接入方式,安屿ai
ChatGPTO1免费:突破智能聊天的极限,体验AI无限可能,糯米ai唱歌
SEO关键词的选择步骤:让你的网站在搜索引擎中脱颖而出,ai书法化
“洗稿技巧如何让你的文章脱颖而出,轻松提升内容创作水平!”,台州椒江seo企业排名
ChatGPT+维护页面:您的智能助手之旅,安全、高效、无忧,奥特曼画图ai
SEO建议:如何通过优化提升网站流量,赢得市场竞争,自媒体网站免费推广平台
SEO译为:网站排名背后的优化策略,会展中心网站优化
“多网建站”助力企业跨越发展,开启全新数字化时代,海南网站优化电池
AI写作的崛起-“只能AI写作”背后的巨大潜力,舞狮摄影ai
SEO优化引导新官网,助力企业迈向成功之路,宋轶ai换
二创AI:打破创意壁垒,引领未来内容创作新潮流,背影教案网站建设游戏
SEO怎么做才能提升网站流量与排名?这篇文章给你全攻略,铁岭定制网站推广公司电话
seo网站反链是什么,网站反链怎么做 ,ai插画头像卡通