选项菜单_上下文菜单_子菜单_图标菜单_自定义菜单_联系人标记弹出菜单
菜单控件<Menu >
选项菜单(Option Menu)
单击Menu实体按钮弹出,android中把它叫做option menu
上下文菜单(ContextMenu 是Menu的子接口)
android中长按视图控件后出现的菜单
子菜单:(SubMenu 是Menu的子接口)
通过addSubMenu方法添加。子菜单不支持嵌套,即子菜单中不能再包括其他子菜单。
图标菜单:这个比较简单,就是通过setIcon添加icon的菜单项 子菜单和上下文菜单不能带图像(只能有选项按钮和复选按钮)
普通列表菜单(ListView) 上节讲过
选项菜单
以下都是Activity类的方法 可以重写
OnCreateOptionsMenu() (创建)
onOptionsMenuClosed(OptionMenu关闭时调用)
onPrepareOptionsMenu(在Option菜单显示之前调用,可用来修改OptionMenu菜单项)
onMenuOpened(Option菜单显示时调用,如果返回false则不显示
这个方法在 onPrepareOptionsMenu之后被调用)
响应选项菜单项单击事件的3种方法:
接口MenuItem的子接口OnMenuItemClickListener,该接口中有一个
onMenuItemClick方法
对Option菜单、子菜单、上下文菜单的菜单项都有效。
如果该菜单项注册了监听setOnMenuItemClickListener(this),则单击时会调用onMenuItemClick方法
如果onMenuItemClick方法返回true,并且菜单项关联了一个Intent,也不会调用startActivity去显示关联的Activity
如果onMenuItemClick方法返回true,则不会执行以下两个单击事件
2. 接口MenuItem的onMenuItemSelected方法
3. 类Activity的onOptionsItemSelected方法
public boolean onMenuItemSelected(int featureId, MenuItem item)
{
super.onMenuItemSelected(featureId, item);/*调用onOptionsItemSelected方法*/
Log.d("onMenuItemSelected:itemId=", String.valueOf(item.getItemId()));
return true;
}
选项按钮和复选框的菜单
接口MenuItem的一些方法:
setCheckable 将子菜单项设置成复选框类型
setChecked 将子菜单项选中
setGroupCheckable 第一个参数GroupId,
第二个参数true,能显示按钮
第二个参数false,不显示按钮(默认)
第三个参数true,选项按钮(单选)
第三个参数false,复选按钮(多选)
单击事件.
类View的子接口 OnClickListener,该接口中有一个onClick方法
如果按钮注册了监听setOnClickListener (this),则单击时会调用onClick方法
上下文菜单
上下文菜单与选项菜单类似,也分为菜单头和菜单项
上下文菜单可以与任意的View进行关联,
上下文菜单必须注册到指定的View才能显示,长按显示
registerForContextMenu(注册到指定View)
onCreateContextMenu (创建调用)
onContextItemSelected(选中调用)
EidtView有系统的上下文菜单,系统会自动将我们自定义的上下文菜
单添加到系统的上下文菜单之后。
响应上下文菜单项单击事件的3种方法,与选项菜单项类似。
XML添加菜单getMenuInflater().inflate(R.menu.file_menu, menu);
<menu xmlns:android=”http://schemas.android.com/apk/res/android”>
<item android:title=”新建”>
<item android:title=”打开”>
<item android:title=”退出”>
</menu>
注意事项:
1.选项菜单最多显示6个,超过6个会显示”更多”或者”more”
2.选项菜单可以setIcon,上下文菜单和子菜单不可以
3.上下文菜单支持CATEGORY_ALTERNATIVE(动态菜单技术),
选项菜单()不支持。
动态菜单技术:若一个activity,
其类型是”android.intent.category.ALTERNATIVE”,
数据是”vnd.android.cursor.dir/vnd.google.note”的话,
系统就会为这个activity动态增加一个菜单项
自定义菜单
通过重写Activity类的onKeydown方法和PopWindow实现
Private int state=2;/*状态变量,1:选项菜单已弹出 2.选项菜单未弹出*/
public boolean onKeyDown(int keyCode, KeyEvent event)
switch (keyCode)
{
case KeyEvent.KEYCODE_MENU:
if (state == 1)/*选项菜单已弹出,不再弹出新的窗口*/
return false;
layout = getLayoutInflater()
.inflate(R.layout.menu_layout, null);/*装载布局文件*/
pop = new PopupWindow(layout, getWindowManager()
.getDefaultDisplay().getWidth(), getWindowManager()
.getDefaultDisplay().getHeight());/*创建PopupWindow对象*/
/*设置弹出窗口的位置在底部/
pop.showAtLocation(layout, Gravity.BOTTOM, 0, 0);
View home = layout.findViewById(R.id.home);
/*为“首页”设置单击事件*/
home.setOnClickListener(new OnClickListener()
{
public void onClick(View view)
{
Toast.makeText(Main.this, "单击定制菜单.", Toast.LENGTH_LONG).show();
pop.dismiss();
state = 2;
}
});
state = 1;
return false;
case KeyEvent.KEYCODE_BACK:
if (state == 1){
pop.dismiss();/*关闭popupWindow*/
state = 2;
}
else if (state == 2){
finish();/*关闭当前Activity*/
}
return false;
}
/*其他按钮的单击事件依然调用Activity类的onKeyDown方法响应*/
return super.onKeyDown(keyCode, event);
自定义菜单二
通过OnMenuOpened和onCreateOptionsMenu相互配合实现
Oncreate方法:
//创建在弹出窗口中显示的GridView对象
GridView gvPopupWindow = (GridView) getLayoutInflater().inflate(
R.layout.popup_window, null);
//为GridView提供数据的Adapter对象 自定义的GridAdapter
GridAdapter gridAdapter = new GridAdapter(this);
gvPopupWindow.setAdapter(gridAdapter);
gvPopupWindow.setOnKeyListener(this);
gvPopupWindow.setOnItemClickListener(this);
popup = new PopupWindow(gvPopupWindow, LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
popup.setFocusable(true);
抽象类AdapterView的子接口OnItemClickListener有一个方法onItemClick
如果注册了监听setOnItemClickListener (this),则单击时会调用onItemClick方法
类View的子接口OnKeyListener有一个方法onKey
如果注册了监听setOnKeyListener (this),则单击时会调用onKey方法
public boolean onCreateOptionsMenu(Menu menu){
menu.add("menu");// 必须创建一项 否则系统不会调用onMenuOpened方法
return super.onCreateOptionsMenu(menu);
}
public boolean onMenuOpened(int featureId, Menu menu){
if (popup != null){
if (popup.isShowing())
popup.dismiss();
else{
View layout = getLayoutInflater().inflate(R.layout.main, null);
popup.showAtLocation(layout, Gravity.CENTER, 0, 0);/*居中弹出菜单*/
}
}
return false;
}
}
QuickContactBadge<联系人标记弹出菜单>
只显示图像菜单
<QuickContactBadge style="?android:attr/quickContactBadgeStyleWindowSmall" />
显示图像菜单和联系人姓名
<QuickContactBadge style="?android:attr/quickContactBadgeStyleWindowLarge" />
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
+ Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ Contacts.DISPLAY_NAME + " != '' ))";/*SQL语句*/
Cursor cursor = getContentResolver().query(Contacts.CONTENT_URI,
CONTACTS_SUMMARY_PROJECTION, select, null,
Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");/*查询数据库*/
cursor.moveToFirst();/*将指针记录移动到第一条记录*/
QuickContactBadge badge1 = (QuickContactBadge) findViewById(R.id.badge1);
QuickContactBadge badge2 = (QuickContactBadge) findViewById(R.id.badge2);
long contactId = cursor.getLong(cursor
.getColumnIndex(Contacts._ID));
String lookupKey = cursor.getString(cursor
.getColumnIndex(Contacts.LOOKUP_KEY));
badge1.assignContactUri(Contacts.getLookupUri(contactId,
lookupKey));/*将当前联系人和QuickContactBadge控件关联
}
选项菜单_上下文菜单_子菜单_图标菜单_自定义菜单_联系人标记弹出菜单相关推荐
- vb屏蔽文本框点右键时的弹出菜单
----------以下代码在模块 程序代码: Option Explicit Public Declare Function SetWindowLong Lib "user32" ...
- vb在 ListBox 之中点击右键弹出菜单
'1.API 的声明: Const LB_ITEMFROMPOINT = &H1A9 Private Declare Function SendMessage Lib "user32 ...
- wpf 代码获取contextmenu_[C#] 转:在WPF里面获取右键弹出菜单(ContextMenu)的鼠标点击源(Owner)控件...
WPF的ContextMenu没有类似WinForm里面ContextMenu.SourceControl的概念,但是你可以通过ContextMenuService的GetPlacementTarge ...
- 为什么二级菜单会被挡住_父页面弹出菜单被子页面挡住问题
常规的方法是不能解决问题的. 子页面既然挡在主页面的前面,被遮挡的区域就不可能显示主页面的内容,无论主页面里面 DOM 对象的 zIndex 调到多高也没用. 我记得官方技术人员在另一个类似问题的帖子 ...
- jquery底部弹出菜单_带有jQuery的新鲜底部滑出菜单
jquery底部弹出菜单 View demo 查看演示Download Source 下载源 In this tutorial we will create a unique bottom slide ...
- 仿闲鱼 底部菜单html,GitHub - 494293346/rotateMenu: 仿闲鱼首页,“底部加号弹出菜单选项” 界面,动画效果可能跟闲鱼有点不一样...
rotateMenu 仿闲鱼首页,"底部加号弹出菜单选项" 界面,动画效果可能跟闲鱼有点不一样 ##简介 仿闲鱼首页,"底部加号弹出菜单选项" 界面,动画效果可 ...
- Android开发——菜单(Menu)-——上下文菜单(ContextMenu)、 弹出菜单(PopupMenu)
上下文菜单(ContextMenu) 长按某个view不放,就会在屏幕中间弹出ContextMenu. 一个Activity中间只可能有一个OptionMenu,但一个Activity中间有多个Vie ...
- 糍粑大叔的独游之旅-u3d实现弹出菜单(上)-动态列表
在u3d5.x中,使用ugui作为默认的界面系统,但控件实在太少,很多需求都不能满足,比如弹出菜单(PopupMenu) 我也懒得去网上找现成的实现,再加上现有代码已经有很多有关列表控件的功能,不想再 ...
- java鼠标右击出现选择窗口_java菜单代码 java中鼠标右击弹出菜单怎样实现
帮忙给一个java菜单栏例子的源代码 给你个小例子,已经添加注释了.自己运行下看看效果,满意的话记得结贴子. import java.awt.BorderLayout; import java.awt ...
最新文章
- 微信小程序开源项目库汇总-持续更新
- UA STAT687 线性模型II 最小二乘理论3 广义最小二乘
- 用springmvc作接口时返回json数据中文乱码
- 计算机组成原理白中英第四章,白中英计算机组成原理第四章答案.ppt
- IDM最新版软件的安装下载和使用方法
- 数字信号处理的fpga实现_数字信号处理的卷积运算实现
- vc编程经典网址推荐
- 13.设计模式--外观模式(Facade模式)
- 从“老公”的称呼来历,看男人地位的变迁
- 某教程学习笔记(一):1、windows基础
- C++作业之模拟打牌:小喵钓鱼
- ファイルダウンロード
- Js获取中国农历,用于确定非固定的农历节假日
- spark使用supervisor守护进程
- 3步轻松申请邮箱账号,申请163vip邮箱
- 大数据可视化的方法、挑战及进展
- 【学习总结】数学-lucas定理
- js拖拽图片到浏览器
- patch kernel
- 什么是外汇托管?外汇托管靠不靠谱?外汇托管适合的投资者类型。