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);
}