Android入门第34天-Android的Menu组件使用大全
Posted TGITCIC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android入门第34天-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入门第34天-Android的Menu组件使用大全的主要内容,如果未能解决你的问题,请参考以下文章
Android入门第18天-Android里的SeekBar的使用
Android入门第17天-Android里的ProgressBar的使用
Android入门第63天-解决同一行里ImageView或者是组件和TextView不能置顶对齐
Android入门第41天-Android中的Service(bindService)