安卓入门4-菜单设计
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);
}
发表评论