android菜单简易笔记
API Guides ----UI------Menus
Menu是一个通用UI组件,提供类似用户使用助手
3.0(API 11)安卓不再提供一个专用的菜单按钮,安卓APP应用当中最多可以出现6个菜单,如果要提供更多选项,在下发会出现一个more,点击后出现其他选项。使用菜单键有3种方式
options menu 收集菜单选项提供给APP ,可以放置一些全局按钮,比如,搜索,设置, Compose; 在android 2.3 以下是存在真实按钮的;使用3.0或者更高版本会提供 actionbar构成整个屏幕, 是可悬浮选项,3.0 Menu button就已经过期了
android建议使用XML定义菜单,可以在activity 或 fragment 使用菜单填充 Menu
优点:形象化菜单结果,可以让内容和行为代码分离,可以提供可选择的菜单适应不同版本和尺寸
如果版本是android 2.3或者更低,系统会调用 onCreateOptionsMenu() 去创建一个option menu, 如果安卓版本是3.0 那么系统会调用 onCreateOption menu 创建并有序地显示 action bar
事件:
当用户去选择一个Item 选项的时候,系统会调用 onOptionsItemSelected () , 并通过getItemid(),得到一个所选的 Item的选项的标识符(id)
再根据id 操作
onOptionItemSelected( MenuItem item ){
switch(item.getItemId()){
case R.id.open:
方法();
break;}}
注意:这个菜单仅仅和当前的Activity 有关系,在其他是不会显示的
在android3.0 当中增加了一个能力:在XML中添加 android: onClick 属性,这个属性的值必须定义一个方法名称,方法的名称可以使用在菜单当中,此方法必须public , 且仅有一个参数 MenuItem , 当系统方法被调用的时候,这个方法就会被触发;
<item
android : id ="@+id /save"
android : title = "never"
android:showAsAction="never"
android: onClick="save"
/>
public void save Message(MenuItem itme ){ }
规则:
必须定义一个menu节点,
<menu>里面可以包含menu items 选项,这个<menu>必须作为根节点,在里面可以控制一个或多个<Item> 和 <group>
<item>里面提供一个单独的item在这个menu中,这个元素可能会包含一个嵌套的menu的节点元素,是为了创建一个菜单
item元素支持多个属性,可以定义在菜单的选项的行为中
android: id 是菜单的唯一标识符,允许应用识别菜单所选项
android: icon 为菜单添加图片(2.3可以加图片,高版本不添加图片)
android: titile 为菜单提供标题
android: showAsAction : 在什么时候显示在action bar上面(平板上,高版本当中)
showAsAction : 是一个类似键盘键,显示在导航菜单栏上(Action Bar),这个导航菜单栏会显示在一个activity 当中,包含一个ActionBar,API版本最低3.0 android 11(设置never菜单就不会跳到右上角)
相关属性:
ifRoom 如果上面有空间,我们就放置这个Item选项,
withText 可以包含一些文字,或者标题,多放其他属性用”|“
never 不要放置( 右上角 )
always 不管有没有位置都放置
<group>一个可选项,不可见 地包含一个<Item>元素,可以允许我们去把菜单进行分类
子菜单:
在任意Item当中我们都可以添加子菜单(除了子菜单),menu作为item的子元素
子菜单事件:
一,
一般处理一级菜单
onOptionsItemSelected( MenuItem item ){
SubMenu subMenu = item . getSubMenu();
MenuItem menuItem = subMenu . findItem(子菜单ID);
menuItem.setIntent(intent);}
SubMenu subMenu = item
一般处理二级菜单
二,
onMenuItemSelected ( int featureId , MenuItem item ){
switch(item.getItemId()){
case R.id.节点:
break;
}}
①Contextual Menus上下文菜单:(长按)
提供一个动作去影响一个特殊的选项,在任何一个view中都可以添加一个显示上下文帧布局菜单,但是经常使用于ListView 或GridView当中,加载模式有两种:浮动列表,长按事件才会出来;
创建一个上下文菜单
1,view上面注册上下文menu,使用registerForContextMenu() ,menu就会关联到View; 如果activity中使用ListView或GridView,当我们想要每一个Item都提供一个上下文菜单的时候,需要在ListView或GridView中去注册 registerForContextMenu();
2. 在Activity或者Fragment 当中实现onCreateContextMenu() 方法,注册后会接收一个长按事件,系统会调用onCreateContextMenu()
例如:
①listView中注册 registerForContextMenu(listView);
① 在menu 设置几个菜单选项
②实现方法
onCreateContextMenu(ContextMenu mennu,View v,ContextMenuInfo, info){
getMenuInflater().inflate(Menu的ID ,menu)}
onContextItemSelected(ItemMenu item){
AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();//返回一个接口
switch(item.getItemId()){
case R.id.edit:
String value = adapter.getItem( info . position );
break;}}
3.MenuInflater 允许从一个资源文件中让我们填充一个上下的文菜单,回调方法的参数包含View,当用户长按后得到一个ContextMenu.ContextMenuInfo对象,此对象提供一个关于被选中的Item的额为的信息。
②Action mode 上下文菜单 android 3.0 API(11)
让系统 implement ActionMode , 让用户获得焦点,并和它进行交互的选项,让用户选择选项时,上下文菜单会显示在屏幕的顶端。当模式被使用时,用户可以选择多个选项,或者反向选择等,当用户按返回键时让模式消失,这个上下文菜单可以单独使用,也可以结合actionbar 使用。如果当前版本是3.0或更高版本,提倡使用
用户可以长按或者复选框,可绑定ListView和GreadView;
①implement ActionMode.Callback接口,在接口中可处理上下文菜单actionbar,并响应单击事件,
在onCreateAcionMode 加载上下文菜单
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.main,menu);
onPrepareActionMode
在onActionItemClicked 中处理事件 switch(item.getItemId()){case R.id.case: mode.finish(); break }
在onDestroyActionMode中销毁 mActionMode = null;
在listView添加onItemLongClickListener 在内部 if (mActionModo!=null){
return false;
}; mActionMode =startActionMode( callback );
view.setSelected(true);
rerurn true;
③Popup Menu(弹出菜单):
弹出菜单可以固定在某个目的Viwe下面,如果view下面有空间的情况下。
API 11 或者更高
①在xml定一个菜单
②实例化菜单需要上下文对象和一个View去固定菜单在哪里
③使用MenuInflater填充菜单,如果API是14 可以使用PopuMenu.inflate() ;
例如:
<Button ...
android : onClick="showPopup"
/>
public void showPoput(View v){
PubuMenu PopupMenu = new PopuMenu(this, view);
pupuMenu.getMenuInflater().inflate( Menu.menu.main,popuMenu.getMenu());
popupMenu.show();
}
<mennu
<item :id @+id /"open" />
>
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。