自Android3.0开始出现,位于屏幕顶部,可以显示应用图标和Activity标题,而且还可以设置限时活动项(Action Item)。
一、主要用途:
- 显示菜单项(在Menu文件中布局+OnCreateOptionsMenu)
- 将程序图标作为返回Home主页面的导航操作
- 基于Tab的导航,切换Fragment
- ActionBar有四种导航方式:Tab、Tab+Swipe、DropDown(下拉)、Swipe Views+Title Strip
- 提供交互式ActionView
二、开启方式:
- 主题设置为Holo
- Activity不要继承ActionBarActivity
- 在代码中可控制ActionBar的开启/关闭:show(),hide()
- 注意:要添加事件监听,最好让activity实现ActionBar.TabListener、ActionBar.OnNavigationListener等接口。
三、基于Tab导航(结合Fragment)
步骤:
- setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)
- 调用addTab(actionbar.newTab().setText("xxx").setTabListener(this))方法添加TAB标签并且添加事件监听器。
Fragment使用:相当于Activity片段,通常多个fragment与一个Activity结合,用于实现同一个Activity创建多个页面。
实现Fragmen通常需要实现其onCreateView函数。
更多关于Fragment的实现参看后续笔记。
例:
ActionBar声明:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ActionBar actionBar = getActionBar();
// 设置ActionBar导航方式:Tab导航
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// 添加三个Tab并添加事件监听
actionBar.addTab(actionBar.newTab().setText("第一页")
.setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("第二页")
.setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("第三页")
.setTabListener(this));
}
Fragment声明:
public class DummyFragment extends Fragment
{
public static final String ARG_SECTION_NUMBER = "section_number";
// 该方法的返回值就是该Fragment显示的View组件
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
TextView textView = new TextView(getActivity());
textView.setGravity(Gravity.CENTER_HORIZONTAL);
// 获取创建该Fragment时传入的参数Bundle
Bundle args = getArguments();
// 设置TextView显示的文本
textView.setText(args.getInt(ARG_SECTION_NUMBER) + "");
textView.setTextSize(30);
// 返回该TextView
return textView;
}
}
Fragment使用:
public void onTabSelected(ActionBar.Tab tab,
FragmentTransaction fragmentTransaction)
{
// 创建一个新的Fragment对象
Fragment fragment = new DummyFragment();
// 创建一个Bundle对象,用于向Fragment传入参数
Bundle args = new Bundle();
args.putInt(DummyFragment.ARG_SECTION_NUMBER,
tab.getPosition() + 1);
// 向fragment传入参数
fragment.setArguments(args);
// 获取FragmentTransaction对象
FragmentTransaction ft = getFragmentManager()
.beginTransaction();
// 使用fragment代替该Activity中的container组件
ft.replace(R.id.container, fragment);
// 提交事务
ft.commit();
}
具体实现参考ActionBar_TabNav。
四、下拉式导航
步骤:
- 设置导航方式为下拉式:actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)
- 添加列表项并设置事件监听:setListNavigationCallbacks(Spinner adapter,ActionBar.OnNavigationListener callBack)()
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ActionBar actionBar = getActionBar();
// 设置ActionBar是否显示标题
actionBar.setDisplayShowTitleEnabled(true);
// 设置导航模式,使用List导航
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
// 为actionBar安装ArrayAdapter
actionBar.setListNavigationCallbacks(
new ArrayAdapter<String>(ActionBar_DropDownNav.this,
android.R.layout.simple_list_item_1,
android.R.id.text1, new String[]
{"第一页","第二页","第三页" }), this);
}
设置与使用Fragment方式与上面方法类似。