Android入门之Menu组件的使用教程详解
作者:TGITCIC
这篇文章主要为大家详细介绍了Android中常用的几个Menu组件的使用教程,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
简介
Android有不同的菜单:
- 系统菜单
- 弹出菜单(可自定义样式)
- Context Menu;
- 子菜单;
菜单的使用和我们前面说的AlertDialog很像。它可以支持自定义样式、也可以对菜单的点击事件进行绑定。
Android里有几个MainActivity事件可以覆盖,其中有以下几个事件就是用于处理Menu的。
- onCreateOptionsMenu(Menu menu),在这个方法里如果你使用menu.add就可以实现在Android的手机里右上角的...图标点击出现系统菜单的效果;
- onOptionsItemSelected(MenuItem item),这个方法里可以进行每个系统菜单项点击的处理事件;
- onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) ,这个是用来创建ContextMenu的,即这个菜单可以绑定在一个组件上,比如说按一下一个组件,对于这个组件的菜单就会被弹出。但是它要启作用必须在程序运行开始时调用一下Activity里的自带方法:registerForContextMenu(View view);来指定,ContextMenu绑定在哪个组件的身上;
- onContextItemSelected(MenuItem item),相应的对于ContextMenu的每一个item的点击处理方法,用户可以自定义和覆盖里面的逻辑;
课程目标
- 做一个可以改变屏幕中间TextView字体颜色的系统菜单;
- 点一下按钮弹出一个PopMenu;
- 对于一个TextView绑定一个ContextMenu;
代码
前端代码
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/viewContext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:text="长按出context menu" android:textSize="18sp" /> <TextView android:id="@+id/textColor" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="选择菜单改变颜色" android:textSize="18sp" /> <Button android:id="@+id/btnShowMenu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/textColor" android:layout_centerHorizontal="true" android:layout_marginTop="10dp" android:text="展示弹出菜单" /> </RelativeLayout>
系统菜单
前端代码
不需要
后端代码
MainActivity.java
系统菜单涉及到两个方法的覆盖,因此只要在这两个方法把系统菜单设上,同时对系统菜单的“选择”事件做出自定义即可,在此我们通过系统菜单改变屏幕中一行字的字体颜色
//1.定义不同颜色的菜单项的标识: private final int RED = 101; private final int GREEN = 102; private final int BLUE = 103; private final int YELLOW = 104; private final int GRAY = 105; private final int CYAN = 106; private final int BLACK = 107; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. menu.add(1, RED, 4, "红色"); menu.add(1, GREEN, 2, "绿色"); menu.add(1, BLUE, 3, "蓝色"); menu.add(1, YELLOW, 1, "黄色"); menu.add(1, GRAY, 5, "灰色"); menu.add(1, CYAN, 6, "蓝绿色"); menu.add(1, BLACK, 7, "黑色"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case RED: textColor.setTextColor(Color.RED); break; case GREEN: textColor.setTextColor(Color.GREEN); break; case BLUE: textColor.setTextColor(Color.BLUE); break; case YELLOW: textColor.setTextColor(Color.YELLOW); break; case GRAY: textColor.setTextColor(Color.GRAY); break; case CYAN: textColor.setTextColor(Color.CYAN); break; case BLACK: textColor.setTextColor(Color.BLACK); break; } return super.onOptionsItemSelected(item); }
弹出菜单
前端代码
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/mcat" android:title="一只喵" /> <item android:id="@+id/mdog" android:title="一只汪" /> </menu>
后端代码
btnShowMenu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PopupMenu popup = new PopupMenu(MainActivity.this,btnShowMenu); popup.getMenuInflater().inflate(R.menu.pop_menu, popup.getMenu()); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()){ case R.id.mcat: Toast.makeText(MainActivity.this,"你轻拍了一下喵", Toast.LENGTH_SHORT).show(); break; case R.id.mdog: Toast.makeText(MainActivity.this,"你轻拍了一下汪", Toast.LENGTH_SHORT).show(); break; } return true; } }); popup.show(); } }); }
ContextMenu
前端
context_menu.xml
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="none"> <item android:id="@+id/blue" android:title="@string/font_blue"/> <item android:id="@+id/green" android:title="@string/font_green"/> <item android:id="@+id/red" android:title="@string/font_red"/> </group> </menu>
后端
我们可以看到这个ContextMenu是绑定在一个TextView上的。
viewContext=(TextView)findViewById(R.id.viewContext); registerForContextMenu(viewContext); //重写上下文菜单的创建方法 @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { MenuInflater inflator = new MenuInflater(this); inflator.inflate(R.menu.context_menu, menu); super.onCreateContextMenu(menu, v, menuInfo); } //上下文菜单被点击是触发该方法 @Override public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.blue: viewContext.setTextColor(Color.BLUE); break; case R.id.green: viewContext.setTextColor(Color.GREEN); break; case R.id.red: viewContext.setTextColor(Color.RED); break; } return true; } }
到此这篇关于Android入门之Menu组件的使用教程详解的文章就介绍到这了,更多相关Android Menu组件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!