(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上长按时会出现上下文菜单 ---会去回调创建上下文菜单的方法onCreateContextMenu
registerForContextMenu(textView);
}
// 2:创建上下文菜单
// menu接收的是上下文菜单对象,由系统创建
// v接收的被注册了上下文菜单的视图对象
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// 创建菜单项对象并加入到上下文菜单对象中(menu)
getMenuInflater().inflate(R.menu.main, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
// 3:给上下文菜单项添加事件监听
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
<span style="color:#3333FF;">此处设置添加监听事件省略</span>
}
return super.onContextItemSelected(item);
}
(3)弹出菜单:PopupMenu
//弹出菜单是从3。0才有的,所以api最低要求是 11
public void showPopMenu(View v)
{
//创建弹出菜单对象
//第二个参数是弹出菜单显示的参考位置,需要一个视图对象
//点击按钮时,让弹出菜单在按钮旁边显示
PopupMenu pop = new PopupMenu(this, v);
//把菜单项加入到弹出菜单中
getMenuInflater().inflate(R.menu.main, pop.getMenu());
//给菜单项添加事件监听
pop.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
//这里与前两个switch一致
return false;
}
});
<span style="color:#FF0000;">//显示菜单</span>
pop.show();
}