主页 > 其他 > 安卓入门4-菜单设计

安卓入门4-菜单设计

2015年4月23日 安卓入门4-菜单设计无评论 阅读: 9,977 次

Android studio会为新建的程序创建一个菜单:\app\src\main\res\menu\menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity" >

<item
android:id="@+id/action_settings"
android:title="@string/action_settings"
android:orderInCategory="100"
android:icon="@drawable/ic_lock_lock"
app:showAsAction="never" />

</menu>

按菜单按键会弹出setting菜单。

orderInCategory:排序号,可控制先后次序

showAsAction是否在菜单栏直接显示(never、always、ifRoom),ifRoom表示有显示空间是则显示

可以在此文件中添加菜单项,比如添加一个about项:

<item
android:id="@+id/action_about"
android:title="@string/action_about"
android:orderInCategory="101"
android:icon="@drawable/ic_menu_slideshow"
app:showAsAction="ifRoom" />

也可以通过程序添加菜单,在onCreateOptionsMenu函数添加:

MenuItem exit = menu.add(0,111,1000,"Exit");
exit.setIcon(R.drawable.ic_menu_slideshow);

111表示id,1000表示显示顺序

为菜单项添加响应事件,在onOptionsItemSelected函数添加:

public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_settings:
Intent it = new Intent(MainActivity.this, MainActivity2Activity.class);
startActivity(it);
break;
case R.id.action_about:
Toast.makeText(MainActivity.this, "" + "关于", Toast.LENGTH_SHORT).show();
break;
case 111:
finish();
default:
break;

}

return super.onOptionsItemSelected(item);
}

在Android4.0之后,为兼容虚拟按键,对MenuBuilder做了修改,无法显示菜单图标,可以加入下面的函数来解决:

@Override
public boolean onMenuOpened(int featureId, Menu menu)
{

//if(featureId ==Window.FEATURE_ACTION_BAR && menu !=null){

if(featureId == Window.FEATURE_OPTIONS_PANEL && menu != null){
if(menu.getClass().getSimpleName().equals("MenuBuilder")){
try{
Method m = menu.getClass().getDeclaredMethod(
"setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
}
catch(NoSuchMethodException e){
//Log.e(TAG, "onMenuOpened", e);
}
catch(Exception e){
throw new RuntimeException(e);
}
}
}
return super.onMenuOpened(featureId, menu);
}

发表评论

新用户的评论需审核后才会显示;

电子邮件地址不会被公开;
必填项已用*标注