android:三种菜单(Menu)的设置
16lz
2021-01-26
(1)Menu 菜单
菜单分为三种(1)系统菜单:OptionMenu 当点击手机菜单键时弹出来的菜单
(2)上下文菜单:ContextMenu 比如当长按listView后弹出来的菜单键
(3)弹出菜单 :PopupMenu 当点击之后弹出来的菜单
(1)系统菜单设置步骤:
<1>首先在需要菜单的Activit生成回调方法:
onCreateOptionsMenu(Menu menu) (这个方法一般在创建项目的时候在MainActivity中生成,就不赘述了
<2>生成菜单上的每个item元素
在res文件-------menu文件夹---------main.xml 中进行声明菜单的item
<3>为每个item设置监听事件
调用方法:onOptionItemSelected(MenuItem item)
{switch (item.getItemId()) { case R.id.action_settings: // 点击时显示系统的设置界面 startActivity(new Intent(Settings.ACTION_SETTINGS)); break; case R.id.action_add: // 点击时放大TextView上的字体 textView.setTextSize(textView.getTextSize() + 5); break; case R.id.action_sub: textView.setTextSize(textView.getTextSize() - 5); break; } return super.onOptionsItemSelected(item); }
假如需要在菜单中设置图标则需要设置 // 为系统菜单项添加图标// 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();}}
(2)上下文菜单(ContextMenu)
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = (TextView) findViewById(R.id.textView);// 1:给需要上下文菜单的UI视图注册上下文菜单// 当在textView上长按时会出现上下文菜单 ---会去回调创建上下文菜单的方法onCreateContextMenuregisterForContextMenu(textView);}// 2:创建上下文菜单// menu接收的是上下文菜单对象,由系统创建// v接收的被注册了上下文菜单的视图对象@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {// 创建菜单项对象并加入到上下文菜单对象中(menu)getMenuInflater().inflate(R.menu.main, menu);super.onCreateContextMenu(menu, v, menuInfo);}// 3:给上下文菜单项添加事件监听@Overridepublic boolean onContextItemSelected(MenuItem item) {switch (item.getItemId()) {此处设置添加监听事件省略}return super.onContextItemSelected(item);}
(3)弹出菜单:PopupMenu //弹出菜单是从3。0才有的,所以api最低要求是 11public void showPopMenu(View v){//创建弹出菜单对象//第二个参数是弹出菜单显示的参考位置,需要一个视图对象//点击按钮时,让弹出菜单在按钮旁边显示PopupMenu pop = new PopupMenu(this, v);//把菜单项加入到弹出菜单中getMenuInflater().inflate(R.menu.main, pop.getMenu());//给菜单项添加事件监听pop.setOnMenuItemClickListener(new OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {//这里与前两个switch一致return false;}});//显示菜单pop.show();}
更多相关文章
- Android之Menu选项菜单
- Android监听程序进入后台,或者恢复到前台
- [UI]抽屉菜单DrawerLayout分析(一)
- Android之微信开放平台创建应用
- Android(安卓)菜单和对话框等
- Android(安卓)- base - SQLite
- Android(安卓)Input(一)-相关模块初始化
- Android(安卓)判断应用是否在运行以及判断处于顶层的activity
- Android文件操作说明