前言
Android提供三种类型的菜单,分别是:选项菜单,子菜单,上下文菜单。前两种菜单类似于PC上的同类菜单那样,而上下文菜单是Android特有的,能够长按界面弹出的菜单,所以我们称之为上下文菜单。
使用方法
1,选项菜单
使用onCreateOptionsMenu方法设置布局的选项菜单,这个菜单你要在xml中写
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
之后在onOptionsItemSelected方法中设置单击了菜单要执行的事件,其中要返回一个boolearn类型,返回true的话活动会继续执行其他事件,相当于本事件结束。
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_clear) {
tv_answer.setText("");
et_divisor.setText("");
et_afterdivisor.setText("");
}else if(id == R.id.action_quit){
finish();
}
return true;
}
2,上下文菜单和选项菜单类似,只不过调用的方法不同,是onCreateContextMenu和onContextItemSelected。同时要在xml中写相应的menu布局。
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.context, menu);
menu.setHeaderTitle("设置字体大小");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
int id = item.getItemId();
switch (id) {
case R.id.Max:
tv_content.setTextSize(27);
break;
case R.id.Min:
tv_content.setTextSize(13);
break;
case R.id.Mid:
tv_content.setTextSize(20);
break;
default:
break;
}
return true; //完成当前操作,继续其他任务
}
3,对于子菜单可以在xml中进行嵌套
<item
android:id="@+id/background"
android:title="设置背景色">
<menu>
<item
android:id="@+id/white"
android:title="白色"/>
<item
android:id="@+id/black"
android:title="黑色"/>
<item
android:id="@+id/gray"
android:title="灰色"/>
</menu>
</item>
Android代码:
package cn.zhuangzhihuang.myreader;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.FrameLayout;
import android.widget.TextView;
public class MainActivity extends Activity {
private FrameLayout sc_background;
private TextView tv_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sc_background = (FrameLayout) findViewById(R.id.sc_background);
tv_content = (TextView) findViewById(R.id.tv_content);
registerForContextMenu(tv_content);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch (id) {
case R.id.exit:
finish(); //退出当前程序
break;
case R.id.black:
sc_background.setBackgroundColor(Color.BLACK);
tv_content.setTextColor(Color.WHITE);
break;
case R.id.white:
sc_background.setBackgroundColor(Color.WHITE);
tv_content.setTextColor(Color.BLACK);
break;
case R.id.gray:
sc_background.setBackgroundColor(Color.GRAY);
tv_content.setTextColor(Color.RED);
break;
default:
break;
}
return true; //完成当前操作,继续其他任务
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
getMenuInflater().inflate(R.menu.context, menu);
menu.setHeaderTitle("设置字体大小");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
int id = item.getItemId();
switch (id) {
case R.id.Max:
tv_content.setTextSize(27);
break;
case R.id.Min:
tv_content.setTextSize(13);
break;
case R.id.Mid:
tv_content.setTextSize(20);
break;
default:
break;
}
return true; //完成当前操作,继续其他任务
}
}
选项菜单布局:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="cn.zhuangzhihuang.myreader.MainActivity" >
<item
android:id="@+id/background"
android:title="设置背景色">
<menu>
<item
android:id="@+id/white"
android:title="白色"/>
<item
android:id="@+id/black"
android:title="黑色"/>
<item
android:id="@+id/gray"
android:title="灰色"/>
</menu>
</item>
<item
android:id="@+id/exit"
android:title="退出"/>
</menu>
上下文菜单布局:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/Max" android:layout_width="wrap_content" android:layout_height="wrap_content" android:title="大号字"></item>
<item android:id="@+id/Mid" android:layout_width="wrap_content" android:layout_height="wrap_content" android:title="中号字"></item>
<item android:id="@+id/Min" android:layout_width="wrap_content" android:layout_height="wrap_content" android:title="小号字"></item>
</menu>
效果: