11 OptionsMenu 菜单
来源:互联网 发布:js 除去空格 换行符 编辑:程序博客网 时间:2024/05/20 04:30
OptionsMenu 选项菜单(系统菜单 )
- OptionsMenu:系统级别菜单
菜单的使用步骤:
1. res里的menu里添加布局 在布局里写菜单项
2. 在逻辑代码中使用OnCreateOptionMenu()方法 将布局展示到菜单
3. 监听菜单项 onOptionsItemSelected() 方法进行监听- 注意若设置图片不显示那么打破封装性修改源码
- 案例
- 代码
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:icon="@drawable/ic_launcher" android:orderInCategory="1" android:showAsAction="never" android:title="我设置图片,但没有显示"> <menu> <item android:icon="@drawable/ic_launcher" android:orderInCategory="1" android:showAsAction="never" android:title="设置图片的子菜单1"/> <item android:orderInCategory="2" android:showAsAction="never" android:title="沒有设置图片的子菜单2"/> </menu> </item></menu>
效果图
解决办法如下
package com.fmy.menu1;import java.lang.reflect.Method;import com.fmy.menu1.R;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.SubMenu;import android.view.View;import android.widget.TextView;public class MainActivity extends Activity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)findViewById(R.id.tv); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.layout, menu); //设置开启图片有效 setIconEnable(menu,true); return super.onCreateOptionsMenu(menu); } //enable为true时,菜单添加图标有效,enable为false时无效。4.0+系统默认无效 private void setIconEnable(Menu menu, boolean enable) { try { Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder"); Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class); m.setAccessible(true); //MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征) m.invoke(menu, enable); } catch (Exception e) { e.printStackTrace(); } } }
- XML中的一些属性
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.fmy.menu.MainActivity" > <!-- android:orderInCategory 排序 数值越大排到越后面 不设置按添加顺序 android:icon设置图标 android:title设置标题 android:showAsAction设置展示方法 值: always永远展示在顶部 超出部分不显示 "ifRoom"如果有顶部有空间 那么展示 不然缩略在... never永远不展示 缩略在控件中 注意:在顶部显示的item 在按菜单键menu键时不显示 --> <item android:id="@+id/action_settings" android:orderInCategory="100" android:showAsAction="never" android:icon="@drawable/ic_launcher" android:title="a"/></menu>
案例1:
如果showAsAction设置为always 超出部分会怎么样
- 代码:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:orderInCategory="2" android:showAsAction="always" android:title="2"/> <item android:orderInCategory="1" android:showAsAction="always" android:title="1"/> <item android:orderInCategory="3" android:showAsAction="always" android:title="3"/> <item android:orderInCategory="4" android:showAsAction="always" android:title="4"/> <item android:orderInCategory="5" android:showAsAction="always" android:title="5"/> <item android:orderInCategory="6" android:showAsAction="always" android:title="6"/> <item android:orderInCategory="7" android:showAsAction="always" android:title="7"/></menu>
案例2
用代码注册按钮 和在xml中设置子菜单按钮
在xml:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:orderInCategory="2" android:showAsAction="always" android:title="2"> <menu> <!--方式一:在item中嵌套一个menu 后直接再写一个item --> <item android:orderInCategory="2" android:showAsAction="always" android:title="我是item-menu-item"/> <!--方式二:在item中嵌套一个menu在放置group 后直接再写一个item --> <group> <item android:orderInCategory="2" android:showAsAction="always" android:title="我是item-menu-group-item"/> </group> </menu> </item></menu>
- java代码:
package com.fmy.menu1;import java.lang.reflect.Method;import com.fmy.menu1.R;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.SubMenu;import android.view.View;import android.widget.TextView;public class MainActivity extends Activity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)findViewById(R.id.tv); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.layout, menu); /** * groupId --->> group的id值 即:放入哪个分组中 * itemId --->> 为这个item设置一个id 以后在监听中可用到 * order --->> 顺序 * title --->> 标题 */ SubMenu sub = menu.addSubMenu(menu.NONE, 1, menu.NONE, "2"); sub.setIcon(R.drawable.ic_launcher); sub.addSubMenu(1, 2, menu.NONE, "呵呵"); sub.addSubMenu(1, 2, menu.NONE, "哈哈"); SubMenu addSubMenu = menu.addSubMenu("嘿嘿"); addSubMenu.addSubMenu("嘿嘿下的子菜单"); sub.addSubMenu(menu.NONE, 2, menu.NONE, "你好朋友"); return super.onCreateOptionsMenu(menu); }}
- 案例3
监听事件
- xml 代码:
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:icon="@drawable/ic_launcher" android:orderInCategory="1" android:id="@+id/root" android:showAsAction="never" android:title="我设置图片,但没有显示"> <menu> <item android:icon="@drawable/ic_launcher" android:orderInCategory="1" android:showAsAction="never" android:id="@+id/boy1" android:title="设置图片的子菜单1"/> <item android:id="@+id/boy2" android:orderInCategory="2" android:showAsAction="never" android:title="沒有设置图片的子菜单2"/> </menu> </item></menu>
- java代码:
package com.fmy.menu1;import java.lang.reflect.Method;import com.fmy.menu1.R;import android.app.Activity;import android.graphics.Color;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import android.view.SubMenu;import android.view.View;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView)findViewById(R.id.tv); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.layout, menu); //设置开启图片有效 setIconEnable(menu,true); return super.onCreateOptionsMenu(menu); } //enable为true时,菜单添加图标有效,enable为false时无效。4.0+系统默认无效 private void setIconEnable(Menu menu, boolean enable) { try { Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder"); Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class); m.setAccessible(true); //MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征) m.invoke(menu, enable); } catch (Exception e) { e.printStackTrace(); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.root: Toast.makeText(this, "root", 0).show(); break; case R.id.boy1: Toast.makeText(this, "boy1", 0).show(); break; case R.id.boy2: Toast.makeText(this, "boy2", 0).show(); break; default: break; } return super.onOptionsItemSelected(item); }}
2 0
- 11 OptionsMenu 菜单
- Android OptionsMenu菜单
- 【Android】选项菜单optionsMenu
- Menu 菜单之OptionsMenu
- Optionsmenu选项菜单
- 创建选项菜单OptionsMenu
- 【Android】选项菜单optionsMenu
- Android optionsMenu,菜单的使用
- OptionsMenu 选项菜单 小实例
- OptionsMenu选项菜单的使用
- OptionsMenu菜单 和 SubMenu创建子菜单
- Android组件 选项菜单(OptionsMenu)
- android之OptionsMenu功能菜单的使用
- Android 菜单简析01(OptionsMenu)
- Android——菜单之选项OptionsMenu
- androoid framework学习之 - 选项菜单OptionsMenu
- Android中的菜单OptionsMenu,ContextMenu和PopupMenu
- Android中的Menu功能菜单-OptionsMenu[选项菜单]
- 近一个月的面试总结(java)
- go 语言的web 框架
- android 调节屏幕亮度
- Design库-TabLayout属性详解
- Java整数相除,输出小数,并保留2位小数
- 11 OptionsMenu 菜单
- Java中的多态和动态绑定
- 平面区域专题
- 11 菜单设置图片不显示的问题
- android 隐藏以及显示软键盘以及不自动弹出键盘的方法
- 启动数据库报错:
- svn迁移出的项目中文乱码解决
- 进程同步的基本概念:临界资源、同步和互斥
- Installation failed since the device possibly has stale dexed jars that ...解决办法