ActionBar上启用拆分操作栏
在<activity> 标签中设置 android:uiOptions="splitActionBarWhenNarrow" 即可启用.
在ActionBar上显示菜单有几种方法.
方法一:
1. menu目录下生成XML文件,其中,要注意需要自定义命令空间。
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/bar_popufind" android:icon="@drawable/find_32" android:title="@string/bar_find" android:showAsAction="ifRoom|withText" app:showAsAction="ifRoom" android:orderInCategory="1" /> <item android:id="@+id/bar_popuexit" android:icon="@drawable/exit_32" android:title="@string/bar_exit" app:showAsAction="ifRoom" android:orderInCategory="2" /> <!-- 这个要保留,不然会报错 --> <item android:id="@+id/action_settings" android:orderInCategory="100" app:showAsAction="never" android:icon="@drawable/xclapplogo" android:title="@string/action_settings"/> </menu>
2. 在onCreateOptionsMenu中指定xml 即可显示在bar上
2.1 不定制
@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; MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_playview, menu); return super.onCreateOptionsMenu(menu); }
@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; /* MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_playview, menu); return super.onCreateOptionsMenu(menu); */ /* actionEnum的值有以下几种: MenuItemCompat.SHOW_AS_ACTION_ALWAYS (始终显示) MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW (隐藏列表中显示) MenuItemCompat.SHOW_AS_ACTION_IF_ROOM (屏幕有空间就显示,没空间就隐藏) MenuItemCompat.SHOW_AS_ACTION_NEVER (永不显示) MenuItemCompat.SHOW_AS_ACTION_WITH_TEXT (既显示图标又显示文字) */ MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.menu_playview, menu); MenuItem exitItem = menu.findItem(R.id.bar_popuexit); MenuItem findItem = menu.findItem(R.id.bar_popufind); MenuItemCompat.setShowAsAction(exitItem, MenuItemCompat.SHOW_AS_ACTION_ALWAYS); MenuItemCompat.setShowAsAction(findItem, MenuItemCompat.SHOW_AS_ACTION_ALWAYS|MenuItemCompat.SHOW_AS_ACTION_WITH_TEXT); return true; }
事件响应:
/** * 菜单事件响应 */ public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case R.id.bar_popuexit: Toast.makeText(getApplicationContext(), "退出菜单", 0).show(); break; case R.id.bar_popufind: Toast.makeText(getApplicationContext(), "查找菜单", 0).show(); break; case android.R.id.home: /* * 返回应用的主activity,最好的方式是在创建的Intent中添加FLAG_ACTIVITY_CLEAR_TOP这个标签。 使用这个FLAG_ACTIVITY_CLEAR_TOP标签,如果应用的主Activity已经在activity栈中存在, 所有在其上的activity都会被销毁, 然后主activity会到栈顶,而不用创建主Activity的的新实例。 * */ Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); Toast.makeText(getApplicationContext(), "android.R.id.home", 0) .show(); break; default: //action_compose break; } return super.onOptionsItemSelected(item); }
不使用XML文件,直接在代码中生成菜单项
@SuppressLint("NewApi") @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. //http://developer.android.com/reference/android/view/Menu.html#add(int) //public abstract MenuItem add (int groupId, int itemId, int order, CharSequence title) //添加菜单项 MenuItem findItem = menu.add(0,1,0,"查找"); MenuItem exitItem = menu.add(0,0,0,"退出"); //绑定到ActionBar findItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); exitItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); return true; }
事件响应:
/** * 菜单事件响应 */ public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case 0: displayToast("退出菜单"); break; case 1: displayToast("查找菜单"); break; case android.R.id.home: /* * 返回应用的主activity,最好的方式是在创建的Intent中添加FLAG_ACTIVITY_CLEAR_TOP这个标签。 使用这个FLAG_ACTIVITY_CLEAR_TOP标签,如果应用的主Activity已经在activity栈中存在, 所有在其上的activity都会被销毁, 然后主activity会到栈顶,而不用创建主Activity的的新实例。 * */ Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); Toast.makeText(getApplicationContext(), "android.R.id.home", 0) .show(); break; default: //action_compose break; } return super.onOptionsItemSelected(item); }