使用xml文件显示菜单是常用一种菜单显示方式,下面我们来介绍一下它的使用。
整体思路:在res的menu目录的main.xml中,用menu和item嵌套的方式定义菜单,在activity中的onMenuItemSelected方法中定义点击菜单所执行的操作。其中有一个操作会跳转到另一个activity,这里需要再清单文件AndroidManifest.xml文件中注册这个activity,这个activity对应的xml文件自己可以任意定义。
main.xml文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!--showAsAction为ifRoom表示如果有空间的话可以把菜单放在Action Bar上,为withText表示可以加标题 -->
<!-- android:showAsAction="ifRoom|withText" -->
<item
android:id="@+id/action_settings"
android:orderInCategory="100"
android:icon="@drawable/ic_launcher"
android:showAsAction="never"
android:title="@string/action_settings">
<menu>
<item android:id="@+id/create_new" android:title="新建文件">
</item>
<item android:id="@+id/open" android:title="打开文件">
</item>
</menu>
</item>
<item
android:id="@+id/sys"
android:icon="@drawable/ic_launcher"
android:orderInCategory="101"
android:showAsAction="never"
android:title="用户菜单"
>
<menu>
<group android:id="@+id/group1">
<item android:id="@+id/load"
android:title="加载文件"
></item>
</group>
<group android:id="@+id/group2">
<item android:id="@+id/save"
android:title="保存文件"
>
</item>
</group>
</menu>
</item>
</menu>
MainActivity.java文件:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@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 onMenuItemSelected(int featureId, MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case R.id.create_new://跳转到另一个activity
Intent intent=new Intent(MainActivity.this,SystemMenu.class);
item.setIntent(intent);
break;
case R.id.open:
Toast.makeText(MainActivity.this, "打开菜单", 1).show();
break;
case R.id.load:
Toast.makeText(MainActivity.this, "加载菜单", 1).show();
break;
case R.id.save:
Toast.makeText(MainActivity.this, "保存菜单", 1).show();
break;
}
return super.onMenuItemSelected(featureId, item);
}
}
SystemMenu.java文件:
public class SystemMenu extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.sysmenu);
}
}