android menu
来源:互联网 发布:jsp mysql 用户注册 编辑:程序博客网 时间:2024/06/06 01:39
- menu
- ActionMode
- PopupMenu
<item/>
标签相关属性
app:showAsAction或者android:showAsAction,使用了support包则用前者,并且在<menu/>
标签中加入:xmlns:app=”http://schemas.android.com/apk/res-auto
可选属性值:
- never:这个表示这个item只能在Action overflow中显示,就是只能点击三个点的图片才能看见
- ifRoom:设置这个属性时表示item在有限的空间内菜单会显示在Action Item快速的访问栏里,如果空间不够就显示在溢出菜单中,也就是三个点图标里面,这个也是经常使用的
- always: 这个值表示强制把菜单永远显示在Action Item快速访问栏中,也就是说这个Item 不会隐藏在溢出菜单中,这个值是不提倡的,因为如果Item过多的话每一个iItem都要强制显示在快速访问栏中的话就会导致UI布局混乱的
- withText: 显示Item的文本,在默认的情况下只是显示Action Item 的图标,如果想让Action Item 显示文本就需要设置这个属性, 比如 ifRoom|withText
orderInCategory:这个是item的位置,数字小的在上面
1. 选项菜单
重写public boolean onCreateOptionsMenu(Menu menu)
和public boolean onOptionsItemSelected(MenuItem item)
方法
动态加载
public boolean onCreateOptionsMenu(Menu menu) { menu.add(menu.NONE,1,1,"菜单1"); menu.add(menu.NONE,2,2,"菜单2"); menu.add(menu.NONE,3,3,"菜单3"); return true;}
上面的四个参数
- int groupId:组别,不分组可以写Menu.NONE
- int itemId:子菜单项Id,作为子菜单的唯一标识
- int order:菜单显示顺序 ,随便设,数字小的在最上面
- CharSequence title:菜单文本显示
menu对象有如下方法可以用来显示与隐藏菜单组
- 使用 setGroupVisible() 显示或隐藏项目
- 使用 setGroupEnabled() 启用或禁用项目
- 使用 setGroupCheckable() 指定项目是否可选中
静态加载
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu1" android:orderInCategory="1" //这个是item的位置,数字小的在上面 android:title="菜单一" /> <item android:id="@+id/menu2" android:orderInCategory="2" android:title="菜单二" /> <item android:id="@+id/menu3" android:orderInCategory="3" android:title="菜单三" /></menu>
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main,menu); //这行代码的意思是:得到MenuInflater对象,把xml文件解析成Menu对象 return true; }
菜单项点击事件
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.menu1: //这个是xml中定义的item的id Toast.makeText(MainActivity.this, "菜单一被选择了", Toast.LENGTH_SHORT).show(); break; case R.id.menu2: Toast.makeText(MainActivity.this, "菜单二被选择了", Toast.LENGTH_SHORT).show(); break; case R.id.menu3: Toast.makeText(MainActivity.this, "菜单三被选择了", Toast.LENGTH_SHORT).show(); break; } return true;}
2. 上下文菜单
xml文件中的item元素中的showAsAction属性默认应该是ifRoom
这里介绍的 actionmode 也是一种上下文菜单(context menu),不同于 android 3.0 之前的上下文菜单,这种新的上下文菜单不是长按一个 view,弹出一个悬浮菜单,而是长按一个view,显示一个新的 view,该 view 覆盖掉 toolbar。这两种不同的上下文菜单效果如下
大致实现流程是:实现ActionMode.Callback接口,并创建其对象——当达成触发条件时,调用startSupportActionMode(ActionMode.Callback callback)
方法启动上下文菜单
现在不建议使用 Activity 的方法来启动上下文菜单,而是建议使用 toolbar 的方法 toolbar.startActionMode(ActionMode.Callback callback)
同时需要在 styles.xml 中设置
<!-- 让 ActionMode 能覆盖 toolbar --><!-- 此处toolbar的高度要用系统的actionbar高度,不能用自定义的高度 --><item name="windowActionModeOverlay">true</item><!--设置 ActionMode 的颜色--><item name="actionModeBackground">@color/colorPrimaryDark</item>
实现上下文菜单
实现ActionMode.Callback接口
需要实现的方法:
1. public boolean onCreateActionMode(ActionMode mode, Menu menu)
:创建菜单菜单
如果是inflate xml文件,那不能像选项菜单那样用getMenuInflater()
来获取MenuInflater对象
而是需要使用mode.getMenuInflater()
2. public boolean onPrepareActionMode(ActionMode mode, Menu menu)
:菜单显示时被调用,可以什么都不做,直接返回false
3. public boolean onActionItemClicked(ActionMode mode, MenuItem item)
:菜单被点击后调用
4. public void onDestroyActionMode(ActionMode mode)
:菜单销毁后调用
达成触发条件,比如长按某个控件
示例代码:
tv.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { //mActionMode是类中定义的字段 if(mActionMode!=null){ return false; } mActionMode = startSupportActionMode(callback); //title和subtitle都可以不要 mActionMode.setTitle("title"); mActionMode.setSubtitle("subtitle"); return true; }});
3. 弹出菜单
示例代码:
tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //参数v是一个View对象,popupmenu将会在该view下面或者上面弹出来 PopupMenu popupMenu = new PopupMenu(MainActivity.this,v); popupMenu.inflate(R.menu.popup); popupMenu.show(); }});
相关方法 setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener listener)
监听点击事件 setOnDismissListener(PopupMenu.OnDismissListener listener)
监听菜单销毁事件
- Android Menu
- Android Menu
- android menu
- Android MENU
- android menu
- Android Menu
- Android Menu
- Android Menu
- android menu
- Android menu
- android menu
- Android Menu
- android menu
- Android Menu
- Android Menu
- Android Menu
- Android-Menu
- Android-menu
- linux常见命令2
- cacti监控的搭建
- 控制执行流程
- android 蓝牙获取心率
- book1 unit1 after-class reading 2 : We All Need Friends
- android menu
- 2017.8
- Least Common Multiple HDU 1019
- Binder实用指南(二)
- 《算法入门经典》的答案
- 数组
- Spring Boot属性配置文件详解
- 51nod 1677 treecnt 组合数
- xmzl大佬