一 说明
android 3.0后出现, 在3.0之前称为Title Bar 显示位置在标题栏上
可以显示应用程序的图标和activity的标题
创建方式的和系统菜单相似, 区别在于: android:showAsAction=""
ifRoom 当ActionBar中有空间 则显示
always 一直显示在ActionBar中
never 永远都不显示在ActionBar中
withText 显示文字
collapseActionView 可以折叠
二, ActionBar中提供的功能
1, 显示选项菜单的菜单项
2, 可以使应用程序的图标作为返回上一级界面的功能
3, 提供了交互式View 和 action View
4, 可以实现基于Tab的导航方式, 可以切换Fragment
5, 下拉导航
6, ActionProvider的使用
三, 创建方式
1, 在res/menu 文件中创建每一个菜单项 声明<item/>
显示方式: showAsAction
图标: icon
2, 在Activity中, 重写父类的 onCreateOptionsMenu(Menu menu) ,加载菜单资源
3, 在Activity中, 重写父类的 onOptionsItemSelected(MenuItem item) 处理每个Item的点击事件
四,分割 操作栏 API 14以上
在清单文件中<application/> 或者<activity/> 中添加属性:android:uiOptions="splitActionBarWhenNarrow"
五, 启动导航图标
作用: 可以让当前App的图标作为可以点击的图标
获取ActionBar的对象: getActionBar()
setDisplayShowHomeEnabled 设置是否显示应用程序的图标
setDisplayHomeAsUpEnabled 设置应用程序的图标可以被点击, 并且在图标的左侧出现一个向左的箭头
setHomeButtonEnabled 设置应用程序的图标可以被点击,但是没有箭头
得到应用程序导航图标的ID: android.R.id.home
六, ActionBar中的常用方法
actionBar.isShowing() 判断当前的ActionBar是否正在显示
actionBar.show() 显示ActionBar
actionBar.hide() 隐藏ActionBar
七, Action View 的使用
可以编辑动作项, 如searchView控件可以直接显示在ActionBar
实现方式有两种:
1, actionViewClass 属性 实现了CollapsibleActionView类
2, actionLayout属性 把普通的布局页面显示
八, ActionBar Tab 导航的功能 通过选项标签来切换Fragment
ActionBar + Fragment
1, 获取ActionBar的对象, 并且设置导航的模式为TABS
setNavigationMode (int mode) 设置导航模式
NAVIGATION_MODE_STANDARD 默认方式
NAVIGATION_MODE_LIST 列表方式
NAVIGATION_MODE_TABS tab标签模式
2, 让当前类实现接口 TabListener , 重写3个方法
3, 创建 每个Tab项 并且把它增加到ActionBar中
ActionBar.Tab tab = ActionBar.newTab();
tab.setIcon();//设置图标
tab.stText();//设置要显示的文字
tab.setTabListener();//设置监听
android 3.0后出现, 在3.0之前称为Title Bar 显示位置在标题栏上
可以显示应用程序的图标和activity的标题
创建方式的和系统菜单相似, 区别在于: android:showAsAction=""
ifRoom 当ActionBar中有空间 则显示
always 一直显示在ActionBar中
never 永远都不显示在ActionBar中
withText 显示文字
collapseActionView 可以折叠
二, ActionBar中提供的功能
1, 显示选项菜单的菜单项
2, 可以使应用程序的图标作为返回上一级界面的功能
3, 提供了交互式View 和 action View
4, 可以实现基于Tab的导航方式, 可以切换Fragment
5, 下拉导航
6, ActionProvider的使用
三, 创建方式
1, 在res/menu 文件中创建每一个菜单项 声明<item/>
显示方式: showAsAction
图标: icon
2, 在Activity中, 重写父类的 onCreateOptionsMenu(Menu menu) ,加载菜单资源
3, 在Activity中, 重写父类的 onOptionsItemSelected(MenuItem item) 处理每个Item的点击事件
四,分割 操作栏 API 14以上
在清单文件中<application/> 或者<activity/> 中添加属性:android:uiOptions="splitActionBarWhenNarrow"
五, 启动导航图标
作用: 可以让当前App的图标作为可以点击的图标
获取ActionBar的对象: getActionBar()
setDisplayShowHomeEnabled 设置是否显示应用程序的图标
setDisplayHomeAsUpEnabled 设置应用程序的图标可以被点击, 并且在图标的左侧出现一个向左的箭头
setHomeButtonEnabled 设置应用程序的图标可以被点击,但是没有箭头
得到应用程序导航图标的ID: android.R.id.home
六, ActionBar中的常用方法
actionBar.isShowing() 判断当前的ActionBar是否正在显示
actionBar.show() 显示ActionBar
actionBar.hide() 隐藏ActionBar
七, Action View 的使用
可以编辑动作项, 如searchView控件可以直接显示在ActionBar
实现方式有两种:
1, actionViewClass 属性 实现了CollapsibleActionView类
2, actionLayout属性 把普通的布局页面显示
八, ActionBar Tab 导航的功能 通过选项标签来切换Fragment
ActionBar + Fragment
1, 获取ActionBar的对象, 并且设置导航的模式为TABS
setNavigationMode (int mode) 设置导航模式
NAVIGATION_MODE_STANDARD 默认方式
NAVIGATION_MODE_LIST 列表方式
NAVIGATION_MODE_TABS tab标签模式
2, 让当前类实现接口 TabListener , 重写3个方法
3, 创建 每个Tab项 并且把它增加到ActionBar中
ActionBar.Tab tab = ActionBar.newTab();
tab.setIcon();//设置图标
tab.stText();//设置要显示的文字
tab.setTabListener();//设置监听
actionBar.add(tab);//把Tab增加到ActionBar中
九:去除ActionbBar
在setContentView之前 requestWindowFeature(Window.FEATURE_NO_TITLE);
或者:android:theme="@android:style/Theme.Black.NoTitleBar"
实现Fragment切换实例:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar = getActionBar();
// 获得导航模式
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// 创建ActionBar.Tab 项, 并且把它增加到ActionBar中
ActionBar.Tab tab = actionBar.newTab();
tab.setText("头条");
tab.setIcon(R.drawable.ic_launcher);
tab.setTabListener(this);
actionBar.addTab(tab);
tab = actionBar.newTab();
tab.setText("体育");
tab.setIcon(R.drawable.ic_launcher);
tab.setTabListener(this);
actionBar.addTab(tab);
actionBar.addTab(actionBar.newTab().setText("财经")
.setIcon(R.drawable.ic_launcher).setTabListener(this));
actionBar.addTab(actionBar.newTab().setText("汽车")
.setIcon(R.drawable.ic_launcher).setTabListener(this));
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
FragmentNew f = new FragmentNew();
Bundle b = new Bundle();
int position = tab.getPosition();
b.putInt("position", position);
f.setArguments(b);
ft.replace(R.id.f, f);
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
public class FragmentNew extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
TextView t = new TextView(getActivity());
int position = getArguments().getInt("position");
switch (position) {
case 0:
t.setText("头条");
break;
case 1:
t.setText("体育");
break;
case 2:
t.setText("财经");
break;
case 3:
t.setText("汽车");
break;
}
return t;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<FrameLayout
android:id="@+id/f"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>