ActionBar提供如下功能
- 显示选项菜单的菜单项
- 使用程序图标作为返回Home主屏幕或向上的导航操作
- 提供交互式View作为Action View
- 提供基于Tab的导航方式,可用于切换多个Fragment
- 提供基于下拉的导航方式
2.11.1 启用 ActionBar
若希望关闭ActionBar,可设置应用主题为XXX.NoActionBar
实际项目中通常推荐使用代码来控制ActionBar的显示、隐藏:show()\hide()
示例代码:
java————————————
public
class
MainActivity
extends ActionBarActivity {
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = getActionBar();
}
public void showActionBar(View source)
{
actionBar.show();
}
public void hideActionBar(View source)
{
actionBar.hide();
ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = getActionBar();
}
public void showActionBar(View source)
{
actionBar.show();
}
public void hideActionBar(View source)
{
actionBar.hide();
}
}
2.11.2 使用ActionBar显示选项菜单
从Android3.0 开始,MenuItem新增了如下方法:
setShowAsAction(int actionEnum):该方法设置是否将该菜单项显示在ActionBar上,作为ActionItem
该方法支持的参数有:
SHOW_AS_ACTION_ALWAYS
|
总是将MenuItem显示在ActionBar上
|
SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
|
将该Action View 折叠成普通菜单项
|
SHOW_AS_ACTION_IF_ROOM
|
当ActionBar位置足够时才显示MenuItem
|
SHOW_AS_ACTION_NEVER
|
|
SHOW_AS_ACTION_WITH_TEXT
|
显示,并显示菜单项文本
|
Android允许在XML菜单资源文件中为<item />元素指定如下属性
android:showAsAction 该属性值的作用类似于setShowAsAction(int actionEnum)
2.11.3 启用程序图标导航
为了将程序转变成可以点击的图标,可以调用ActionBar的如下方法
setDisplayHomeAsUpEnable(boolean showHomeAsUp)
|
设置是否将应用程序图标转变成可点击图标,并在图标上添加一个向左的箭头
|
setDisplayOptions(int options)
|
通过传入int类型常量来控制该ActionBar的显示选项
|
setDisplayShowHomeEnabled(boolean showHome)
|
设置是否显示应用程序图标
|
setHomeButtonEnabled(boolean enabled)
|
设置是否将应用程序图标转变成可点击的按钮
|
2.11.4 添加Action View
ActionBar上除了可以显示普通的Action Item之外,还可以显示普通的UI组件。为ActionBar添加Action View可以用如下两种方法:
- 定义Action Item时使用android:actionViewClass 属性指定Action View的实现类
- 定义Action Item时使用android:actionLayout属性指定Action View对应的视图资源
2.11.5 使用 ActionBar实现Tab导航
ActionBar在顶端生成多个Tab标签,当用户点击某个Tab标签时,系统根据用户点击时间导航指定页面
- setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)
- 调用ActionBar的addTab()方法添加多个Tab标签
实际应用时常与Fragment配合
2.11.6 使用ActionBar实现下拉式导航
为了使用ActionBar实现Tab导航步骤
- actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)
- setListNavigationCallbacks(SpinnerAdapter adapter, ActionBar.OnNavigationListener callback)()添加多个列表项,并为每个列表项设置事件监听器
示例代码:
public class ActionBar_DropDownNav extends Activity implements
ActionBar.OnNavigationListener
{
private static final String SELECTED_ITEM = "selected_item";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ActionBar actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
actionBar.setListNavigationCallbacks(
new ArrayAdapter<String>(ActionBar_DropDownNav.this,
android.R.layout.simple_list_item_1,
android.R.id.text1, new String[]
{“page1”,”page2,”page3" }), this);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState)
{
if (savedInstanceState.containsKey(SELECTED_ITEM))
{
getActionBar().setSelectedNavigationItem(
savedInstanceState.getInt(SELECTED_ITEM));
}
}
@Override
public void onSaveInstanceState(Bundle outState)
{
outState.putInt(SELECTED_ITEM,
getActionBar().getSelectedNavigationIndex());
}
@Override
public boolean onNavigationItemSelected(int position, long id)
{
Fragment fragment = new DummyFragment();
Bundle args = new Bundle();
args.putInt(DummyFragment.ARG_SECTION_NUMBER, position + 1);
fragment.setArguments(args);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.container, fragment);
ft.commit();
return true;
}
}
本章小结
View ViewGroup
基本UI、高级UI
AlertDialog、PopupWindow、DatePickerDialog、TimerPickerDialog
SubMenu、ContextMenu、MenuItem