转载请注明出处:http://blog.csdn.net/yegongheng/article/details/38488849


Action Bar 初步

从今天开始,我们进入Android UI控件的学习阶段。首先我们来了解一下在Android开发中几乎每一个APP都会用到的一个非常重要的控件--Action Bar。Action Bar是在Android3.0之后新增的功能导航栏控件,它标识了用户当前操作界面的位置,并提供了额外的用户动作和界面导航功能。使用Action Bar的好处是可以为用户提供统一的导航操作栏,且将一些比较为重要的操作放在导航栏中方便用户操作,还有就是Action Bar可以自适应各种不同大小的屏幕,有良好的屏幕分辨率适配功能。下面是一张Android官网提供的一张Action Bar组成元素的的实例图片,并有相关的说明,如图下:


图标说明: 1、Action Bar图标;2、两个action 选项;3、overflow按钮。

基本了解了Action Bar的概念以及组成方式后,下面我们来深入地学习如何创建自己的Action Bar。

不同Android系统版本使用Action Bar的包引入问题

由于Action Bar是Android 3.0 (API level 11)之后才引入Android API中的,所以Android3.0之前的API是没有提供Action Bar的原生类和方法。那Android SDK为了兼容不同低版本和高版本的开发,另外提供了一个第三方的jar类库--android-support-v7-appcompat.jar。它封装了Action Bar相关的类和方法,使用Android3.0以下版本的Android SDK的同学只要引入该jar包,且子类Activity继承ActionBarActivity类便可使用Action Bar了。

为界面添加ActionBar

接下来就可以开始使用Action Bar来进行我们的开发工作了,首先要为我们的界面(Activity)引入Action Bar,第一步是在AndroidManifest.xml文件中的对应声明的Activity添加以下属性值(这里默认是基于Android4.4的API上开发的):

<!--ActionBar浅色背景 ,Android3.0版本以下使用@style/Theme.AppCompat.Light--> android:theme="@android:style/Theme.Holo.Light" 

添加完该属性后我们为对应的界面添加了一个浅色背景的Action Bar,对应显示的界面如图下:


若要将其换成稍微深一点的背景色,可以将属性值改成如下:

<!--ActionBar深色背景,Android3.0版本以下使用@style/Theme.AppCompat.Light.DarkActionBar--> android:theme="@android:style/Theme.Holo.Light.DarkActionBar" 
对应的显示的界面如图下:


如果想要对整个APP的Activity设置相同的Action Bar样式,可以在AndroidManifest.xml中的<application/>设置全局的主题,这样可以将Theme样式应用到每一个Activity上,设置方法如同上。

ActionBar图标和标题的修改及事件响应

Action Bar显示成功后,我们接着为Action Bar设置icon和title,设置的方法一般有两种,xml设置和代码设置,XML设置方法就是在AndroidManifest.xml文件对应声明的Activity添加如下属性值:
<!--设置ActionBar图标 --> android:logo="@drawable/sys_icon"<!--设置ActionBar的名称 --> android:label="@string/main_title"
代码设置的方法是首先通过调用上下文的getActionBar()方法获取ActionBar实例对象,然后再调用ActionBar对象的setIcon()和setTitle()方法分别设置ActionBar的图标和Title,具体的代码如下:
/** * 获取ActionBar实例对象,若是Android3.0之前的版本,需 * 调用getSupportActionBar()方法获取ActionBar实例对象*/ ActionBar mActionBar = getActionBar(); //设置ActionBar的icon mActionBar.setIcon(R.drawable.sys_icon); //设置ActionBar的title mActionBar.setTitle(R.string.main_title);
设置完成后,运行程序,界面视图效果如下: 接着,我们为ActionBar的icon设置按钮点击事件,该点击事件一般是执行关闭本界面或直接跳转到指定界面的功能。废话不多说,我们用一个例子来实现一下,该例子实现的思路是有三个界面(Activity),分别名为MainActivity、ScreenFirstActivity和ScreenSecondActivity,三个Activity分别可跳转顺序的是MainActivity -> ScreenFirstActivity -> ScreenSecondActivity,该任务栈的管理方式如图下:
接着为ScreenSecondActivity的ActionBar的icon设置按钮点击事件,然后根据按钮点击事件执行相关操作。好了,开始我们的编码工作,首先ActionBar对象调用如下方法:
ActionBar mActionBar = getActionBar();//是否启用ActionBar图标的导航功能mActionBar.setDisplayHomeAsUpEnabled(true);
该方法主要作用是设置ActionBar图标是否具有导航点击事件功能,接下来重写Menu的事件响应方法onOptionsItemSelected(MenuItem item),然后执行如下操作:
@Overridepublic boolean onOptionsItemSelected(MenuItem item) {     int id = item.getItemId();     switch (id) {     //ActionBar Home键ID     case android.R.id.home:     //关闭当前界面         finish(); break;     default: break;       }    return true;}
在模拟器上运行实例程序,操作及效果图如下:

执行该操作栈的变化方式如图下: 本操作通过调用finish()方法将本界面从当前Task移除并回退到ScreenFirstActivity,该操作其实和用户点击Back回退键的效果是一样的,但ActionBar icon事件响应不仅仅具有此功能,它还可以根据用户的设置跳转到目标界面。要实现此功能我们一般分为三个步骤: 1.ActionBar对象调用setDisplayHomeAsUpEnabled(true),为ActionBar设置事件点击功能; 2.在AndroidManifest.xml文件中声明的ScreenSecondActivity属性中指定所需要跳转的父类(例子中指定MainActivity为目标界面),具体代码如下:
<activity       android:name="com.androidleaf.actionbar.activity.ScreenSecondActivity"      android:logo="@drawable/sys_icon"      android:label="@string/main_title"     >        <!-- 设置点击ActionBar图标时跳转的父类Activity界面名称,Android4.1之前使用这个设置,              Android4.1之后可以 直接使用android:parentActivityName属性设置         -->        <meta-data            android:name="android.support.PARENT_ACTIVITY"            android:value="com.androidleaf.actionbar.activity.MainActivity"            />     </activity>
3.在ActionBar事件响应方法中执行如下操作:
public boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();switch (id) {//ActionBar Home键IDcase android.R.id.home://获取跳转至父类Activity的IntentIntent mIntent = NavUtils.getParentActivityIntent(this);//判断父类Activity和本Activity是否同属于一个Task,true则直接根据Intent跳转,否则重新创建一个Taskif (NavUtils.shouldUpRecreateTask(this, mIntent)) {             TaskStackBuilder.create(this)                      .addNextIntentWithParentStack(mIntent)                      .startActivities();         } else {         mIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);             NavUtils.navigateUpTo(this, mIntent);         }  break;default:break;}return true;}
执行完三个步骤后,我们来运行一下实例程序,执行效果如图下:

执行该操作栈的变化方式如图下:
至此,我们便实现了ActionBar事件点击跳转到指定目标界面的功能。

添加ActionBar按钮及事件响应

除此之外,我们还可以根据具体页面需求为ActionBar添加若干Action Items,Items以文字或图标的形式显示在Action Bar的右侧,当在Action Bar上的Action Items过多时,则以OverFlow的形式将Action Items以列表的形式隐藏起来。 为ActionBar添加 Action Items实现起来也比较简单,只需要在res/menu文件夹下自定义xml布局文件,然后在对应的界面将xml文件加载进来即可。添加Action Item一般也分为三个步骤,如下: 1. 在res/menu/文件夹下编写xml文件; 2. 在界面(Activity)重写onCreateOptionsMenu(Menu menu)方法,并调用getMenuInflater().inflate()方法加载xml文件; 3. 重写事件响应方法onOptionsItemSelected(MenuItem item),在该方法中根据获取到的menuItem ID执行相关操作。 我们开始步骤一,以本例子为例,我们在res/menu/文件夹在创建main.xml文件,并添加相应的代码,如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    tools:context="com.androidleaf.actionbar.activity.MainActivity" >    <item        android:id="@+id/action_delete"        android:orderInCategory="20"        android:title="@string/action_delete"        android:icon="@drawable/msg_icon_clear_all"        android:showAsAction="always"/>    <item        android:id="@+id/action_tip"        android:orderInCategory="30"        android:title="@string/action_tip"        android:icon="@drawable/poi_icon_action_tip"        android:showAsAction="always"/>    <item        android:id="@+id/action_settings"        android:orderInCategory="40"        android:title="@string/action_setting"        android:icon="@drawable/user_icon_setting"        android:showAsAction="ifRoom"/>    <item        android:id="@+id/action_send"        android:orderInCategory="50"        android:title="@string/action_send"        android:icon="@drawable/title_icon_send"        android:showAsAction="ifRoom"/>    </menu>
每一个item都对应一个Action Item,我们可以为每个Item设置icon、title或showAsAction等,我们先对<item/>中的属性作用做一些说明: android:title : Action Item的标题名称; android:icon: Action Item的图标; android:orderInCategory: Action Item的排序类型值,用户可以使用该属性为每个<item/>设置排序的顺序,当设置的值越小,该Action Item排列的顺序越靠前,同样的,当设置的值越大,该Action Item排列的顺序越往后。 android:showAsAction: 设置Action Item显示位置类型,一般以下几个值可以选择: (1)always:表示该Action Item一直显示在Action Bar上,若屏幕空间不够则无法显示; (2)never:表示该Action Item一直隐藏在overFlow中; (3)ifRoom:表示Action Bar空间足够的情况下显示在Action Bar,否则隐藏在overFlow中; (4)withText:表示Action Item显示尽可能是文字,不过当Action Item空间不够活icon有效时,该属性则不起作用; (5)collapseActionView:表示Action Item是可合并的,当Action Bar有足够空间时,该Action Item和其它显示在Action Bar的Action Item显示全部,当Action Bar空间不足时,则该Action Item合并其它Action Item。collapseActionView需配合ifRoom使用。 编写完xml文件后,我们再将xml文件加载进来,具体代码如下:
@Overridepublic 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;}
最后我们来实现Item的事件响应方法,具体代码如下:
@Overridepublic boolean onOptionsItemSelected(MenuItem item) {int id = item.getItemId();Resources mResources = getResources();switch (id) {case R.id.action_delete:showInformation(mResources.getString(R.string.action_delete));break;case R.id.action_tip:showInformation(mResources.getString(R.string.action_tip));break;case R.id.action_settings:showInformation(mResources.getString(R.string.action_setting));break;case R.id.action_send:showInformation(mResources.getString(R.string.action_send));break;default:break;}return true;}
至此,我们便按以上三个步骤代码编写完毕, ok,那我们先来运行一下程序看一下Action Items的效果图,如图下:

细心的读者可能会发现overFlow中的Item设置了icon,却没有显示,到底是为什么呢?其实很简单,查看源码可知,overflow中的Action item应不应该显示图标,是由MenuBuilder这个类中的setOptionalIconsVisible(boolean visible)方法来决定的.默认是false不显示,那如果要让其显示图标的话,这可以通过反射机制获取 setOptionalIconsVisible(boolean visible)并 为其设置为true就行,具体的思路是重写代码如下:
@Overridepublic boolean onMenuOpened(int featureId, Menu menu) {// TODO Auto-generated method stubif (featureId == Window.FEATURE_ACTION_BAR && menu != null) {  //通过发射机制根据类名获取setOptionalIconsVisible(boolean visible)方法,并为其设置true        if (menu.getClass().getSimpleName().equals("MenuBuilder")) {              try {                  Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);                  method.setAccessible(true);                  method.invoke(menu, true);              } catch (Exception e) {              }          }      }  return super.onMenuOpened(featureId, menu);}
然后再运行程序,效果如图下:

添加 Drop-Down Navigation

Action Bar还提供了一个下拉导航的功能,APP有时若需要根据不同的分类来为页面加载不同的数据,Action Bar的下拉导航功能可以方便地解决该问题,下面我们来先看一下它的实际效果图,如图下:
要实现上诉功能其实也比较简单,一般分为四个步骤实现: 1、ActionBar对象调用setNavigationMode(ActionBar.NAVIGATION_MODE_LIST)方法为ActionBar设置拉下导航模式; 2、初始化适配器并绑定下拉导航列表数据; 3、创建Action Bar下拉导航事件监听类; 4、ActionBar对象调用setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback)方法,为ActionBar设置Adapter并为其设置事件监听。 下面我们就编写代码按照步骤一一实现,具体代码如下:
public class ScreenSecondActivity extends BaseActivity {private SpinnerAdapter mSpinnerAdapter;private TextView mTextView;@SuppressLint("NewApi")@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_screen_second);//是否启用ActionBar图标的导航功能mActionBar.setDisplayHomeAsUpEnabled(true);mActionBar.setTitle("");//1、设置Action Bar的导航模式mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);//2、初始化适配器并绑定下拉导航列表数据mSpinnerAdapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array.navigation_list_array,android.R.layout.simple_spinner_dropdown_item);//4、为ActionBar设置Adapter并为其设置事件监听mActionBar.setListNavigationCallbacks(mSpinnerAdapter, new MyOnNavigationListener());mTextView = (TextView)findViewById(R.id.screen_second_textview); }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.screen_second, menu);return true;}@Overridepublic boolean onMenuOpened(int featureId, Menu menu) {// TODO Auto-generated method stubif (featureId == Window.FEATURE_ACTION_BAR && menu != null) {          if (menu.getClass().getSimpleName().equals("MenuBuilder")) {              try {                  Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);                  m.setAccessible(true);                  m.invoke(menu, true);              } catch (Exception e) {              }          }      }  return super.onMenuOpened(featureId, menu);}@SuppressLint("NewApi")@Overridepublic boolean onOptionsItemSelected(MenuItem item) {return true;} //3、 创建Action Bar下拉导航事件监听类private class MyOnNavigationListener implements OnNavigationListener{@Overridepublic boolean onNavigationItemSelected(int itemPosition, long itemId) {// TODO Auto-generated method stubswitch (itemPosition) {case 0:mTextView.setText("全部");break;case 1:mTextView.setText("热门信息");break;case 2:mTextView.setText("朋友");break;case 3:mTextView.setText("家人");break;default:break;}return true;}}}
至此,我们便实现了在ActionBar中添加下拉导航的功能。

添加Action View

ActionBar还提供一个替换Action Item的方案--为ActionBar添加Action View。在menu的xml文件中<item/>选项里有一个android:actionViewClass属性,是专门为ActionBar添加自定义View的操作,它与Action Item相比,用户可以添加不同的ActionView,以完成更复杂丰富的功能。使用该方式最常用的应用场景就是为ActionBar设置一个SearchView搜索框,方便用户在ActionBar上执行搜索操作。下面我们也来看下它实现的效果图,如图下:
要在ActionBar中引入ActionView很简单,拿设置SearchView为例,一般分为三个步骤,如下: 1.在res/menu/screen_first.xml文件中对应的<item/>设置android:actionViewClass=“android.widget.SearchView”; 2.在ScreenFirstActivity中重写onCreateOptionsMenu(Menu menu)并在该方法中根据ID获取MenuItem实例,并调用getActionView()方法获取SearchView对象,并设置相关属性值; 3.执行搜索操作。 下面我们就编写代码按照步骤一一实现,首先res/menu/screen_first.xml文件中对应<item/>的代码如下:
<item    android:id="@+id/action_search"    android:title="@string/action_search"    android:orderInCategory="20"    android:actionViewClass="android.widget.SearchView"    android:icon="@drawable/common_icon_search"    android:showAsAction="ifRoom|collapseActionView"    />
接着执行第二、三步骤的操作,具体代码如下:
MenuItem searchMenuItem = menu.findItem(R.id.action_search); //2、调用getActionView()获取SearchView对象SearchView mSearchView = (SearchView) searchMenuItem.getActionView();//获取搜索的管理对象SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);//当前的Activity为可搜索的ActivitymSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));//以默认的方式展开mSearchView.setIconifiedByDefault(true);//3、执行相关搜索操作//......
在这里我们只是简单地在ActionBar上引入一个SearchView,想要详细了解如何使用SearchView执行搜索操作的读者,可以阅读《Android实现Search搜索框原理分析》这篇博客。

添加Action Provider

最后我们再介绍一种十分有用的功能--Action Provider。它类似于上面讲的下拉导航的功能,不同的是下拉导航列表只能显示文本,Action Provider它可以自定义Item的布局选项,且Android系统也提供了好几个内置的Action Provider,例如ShareActionProvider,它可以很方便地为用户提供分享应用信息的功能,还有MediaRouteActionProvider,它主要是将MediaRouteButton展示在ActionBar上,并允许用户去选择Media Route并控制当前所选择的Media Route。使用Android内置的Action Provider与添加Action View的方式差不多,这里不多介绍,感兴趣的读者可以自行实验。我们在这里来学习一下如何自定义Action Provider,来添加我们所需的功能选项。在此之前,我们来看一下自定义Action Provider在ActionBar上的效果图,如图下:


一般的,自定义Action Provider并将其添加到ActionBar分为以下三个步骤:

1.在res/menu/screen_first.xml文件中对应的<item/>设置android:actionProviderClass="com.androidleaf.actionbar.widget.MyActionProvider";

2.创建继承Action Provider的子类,并重写onCreateActionView()、hasSubMenu()和onPrepareSubMenu()方法,在onPrepareSubMenu()方法中为Action Provider添加子菜单项,并为每个子菜单项设置事件监听;

3.在ScreenFirstActivity中重写onCreateOptionsMenu(Menu menu)并在该方法中根据ID获取MenuItem实例,并调用getActionProvider()方法获取MyActionProvider对象,并为子菜单项实现事件监听;

首先实现步骤一,res/menu/screen_first.xml文件中对应的<item/>代码如下:

<item    android:id="@+id/action_write"    android:title="@string/action_write"    android:orderInCategory="30"    android:actionProviderClass="com.androidleaf.actionbar.widget.MyActionProvider"    android:icon="@drawable/icon_title_write"    android:showAsAction="always"    />

再来看一下继承ActionProvider的子类MyActionProvider的代码,如下:

public class MyActionProvider extends ActionProvider {private Context mContext;/** * 为Action Provider子菜单项的事件点击定义回调接口 */private SubMenuItemClickListener mSubMenuItemClickListener;public interface SubMenuItemClickListener{public void onSubMenuItem(int itemId);}public void setOnSubMenuItemClickListener(SubMenuItemClickListener mSubMenuItemClickListener){this.mSubMenuItemClickListener = mSubMenuItemClickListener;}MyProviderOnMenuItemClickListener mProviderOnMenuItemClickListener =new MyProviderOnMenuItemClickListener();public MyActionProvider(Context context) {super(context);// TODO Auto-generated constructor stubmContext = context;}@Overridepublic View onCreateActionView() {// TODO Auto-generated method stubreturn null;}@Overridepublic boolean hasSubMenu() {// TODO Auto-generated method stubreturn true;}@Overridepublic void onPrepareSubMenu(SubMenu subMenu) {// TODO Auto-generated method stub//清除子菜单实例subMenu.clear();//从XML文件中添加MenuItemMenuInflater menuInflater = new MenuInflater(mContext);menuInflater.inflate(R.menu.provider_submenu, subMenu);//为各项MenuItem设置事件监听for(int i = 0;i < subMenu.size();i++){subMenu.getItem(i).setOnMenuItemClickListener(mProviderOnMenuItemClickListener);}}private class MyProviderOnMenuItemClickListener implementsOnMenuItemClickListener {@Overridepublic boolean onMenuItemClick(MenuItem item) {// TODO Auto-generated method stubmSubMenuItemClickListener.onSubMenuItem(item.getItemId());return true;}}}

接着在ScreenFirstActivity类中实现SubMenuItemClickListener回调接口:

public class ScreenFirstActivity extends BaseActivity implements SubMenuItemClickListener{

然后在重写onSubMenuItem(int itemId)方法,具体代码如下:

@Overridepublic void onSubMenuItem(int itemId) {// TODO Auto-generated method stubswitch (itemId) {case R.id.user_like:showInformation("点赞评论");break;case R.id.user_fuck:showInformation("Fuck评论");break;default:break;}}

最后在onCreateOptionsMenu(Menu menu) 中获取MyActionProvider对象并设置事件监听,具体代码如下:

 /** * 获取MyActionProvider对象,并设置事件监听 */ MenuItem writeMenuItem = menu.findItem(R.id.action_write); MyActionProvider myActionProvider = (MyActionProvider)writeMenuItem.getActionProvider(); myActionProvider.setOnSubMenuItemClickListener(this);

至此,自定义ActionProvider的操作便执行完毕。

添加ActionBar Tabs

在Android3.0之前,很多开发人员都喜欢用TabWidget结合TabHost来实现页面切换卡的功能,Android3.0引入ActionBar之后,该方法就比较少被人使用了。因为我们完全可以利用ActionBar来很方便地实现上述功能,并且Google官方也推荐使用ActionBar,因为它不仅实现起来更加方便简洁,而且也更加智能,它可以自适应屏幕的大小,当Tabs在平板上显示时,由于ActionBar的拥有充足的显示空间,Tabs会自动显示在ActionBar上,如图下:
而当在手机上显示时,由于ActionBar的显示空间不足,Tabs会显示在ActionBar下方,如图下:
接下来我们将使用ActionBar来实现一个页面切换卡(Tabs)的功能。要添加ActionBar Tabs一般分为以下三个步骤: 1.创建实现ActionBar.TabListener接口的子类,并根据Tab切换的item来动态添加或移除Fragment; 2.ActionBar调用setNavigationMode(ActionBar.NAVIGATION_MODE_TABS)方法,设置Tabs导航模式; 3.创建ActionBar.Tab对象,为其设置ActionBar.TabListener监听器,并设置Tab的标题名称或图标; 4.将ActionBar.TAB对象添加到ActionBar中。 下面我们将按照步骤来一一实现,首先实现第一步,创建实现ActionBar.TabListener接口的子类,具体的代码如下:
public class ActionBarTabListener<T extends Fragment> implements TabListener {private Fragment mFragment;private Class<T> mFragmentClass;private String fragmentTag;private Activity mActivity;public ActionBarTabListener(Activity mActivity,String fragmentTag,Class<T> mFragmentClass){this.mActivity = mActivity;this.mFragmentClass = mFragmentClass;this.fragmentTag = fragmentTag;}@Overridepublic void onTabSelected(Tab tab, FragmentTransaction ft) {// TODO Auto-generated method stub//如果Fragment的实例对null,则重新创建if(mFragment == null){//根据类名初始化Fragment对象mFragment = Fragment.instantiate(mActivity, mFragmentClass.getName());ft.add(android.R.id.content, mFragment,fragmentTag);}else{//当选中的Tab所对应的Fragment不为null时,则建立与Tab的依赖ft.attach(mFragment);}}@Overridepublic void onTabUnselected(Tab tab, FragmentTransaction ft) {//当Tab别切换到另一个Tab,依附在当前Tab的Fragment如果不为null,则解除依赖if(mFragment != null){ft.detach(mFragment);}}@Overridepublic void onTabReselected(Tab tab, FragmentTransaction ft) {// TODO Auto-generated method stub}}
   接着在ScreenSecondActivity中实现第2、3、4步骤,具体的代码如下:       
//2、设置导航模式 mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);//3、创建ActionBar.Tab对象,为其设置ActionBar.TabListener监听器,并设置Tab的标题名称或图标Tab mTabApp = mActionBar.newTab().setText("应用").setTabListener(new ActionBarTabListener<ApplicationFragment>(this,"application", ApplicationFragment.class));Tab mTabGame = mActionBar.newTab().setText("游戏").setTabListener(new ActionBarTabListener<GameFragment>(this, "game",GameFragment.class));//4、将ActionBar.TAB对象添加到ActionBar中mActionBar.addTab(mTabApp);mActionBar.addTab(mTabGame);
执行完四个步骤后,我们来运行一下程序,操作效果图如下:

至此,我们便成功使用ActionBar添加Tabs,是不是很简单方便!

小结:由于Action Bar所涉及到的知识比较多,且鉴于篇幅关系,本文暂且讨论以上知识点,更多关于Action Bar的知识将在下一篇文章中进行深入讨论。先来为本文学习的知识做一个小结,本文讨论的的知识点主要包括:

(1)为页面添加ActionBar;(2)ActionBar图标和标题的修改及事件响应;(3)添加ActionBar按钮及事件响应;(4)为ActionBar添加 Drop-Down Navigation;(5)为ActionBar添加Action View;(6)为ActionBar添加Action Provider;(7)添加ActionBar Tabs。


源代码下载,请戳下面:

  • GITHUB下载
  • CSDN下载

更多相关文章

  1. 浅析Android(安卓)Service 中 onStartCommand方法及注意事项
  2. Android(安卓)手机灭屏流程分析详解
  3. Android群英传之Android绘图机制与处理技巧
  4. Android中ListView数据使用sAdapter.notifyDataSetChanged();方
  5. Android设置PreferenceCategory背景颜色的方法
  6. Android(安卓)ListView的多布局实现
  7. Android(安卓)Socket服务器 Servlet服务器
  8. Android点击事件分发流程
  9. ListView加载多套布局

随机推荐

  1. Android(安卓)– 切换夜间模式
  2. Android(安卓)API 中文 (51) —— ZoomButt
  3. 曾经的笔记——android的学习笔记(广播接
  4. AndroidStudio快捷键整理--5
  5. 《Android系统安全和反编译实战》目录
  6. 23. android dialog——自定义对话框之三
  7. 两个APP之间怎么调用---IT蓝豹
  8. Android(安卓)Retrofit
  9. android之在activity中控制另一个activit
  10. Android(安卓)干货App开发总结