今天写了个示例代码,就是使用Actionbar类实现顶部标签切换功能。如果所示。


使用最新的adt工具,创建项目的时候都会带一个android-support-v7-appcompat的类库项目,

这个libproject中有我们要用的ActionBar,可以适配2.1的Android系统。

废话不多说,直接上代码。


1、修改activity_main.xml,增加ViewPager。

<android.support.v4.view.ViewPagerxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/pager"android:layout_width="match_parent"android:layout_height="match_parent"/>

2、修改MainActivity中的代码,让其继承ActionBarActivity

publicclassMainActivityextendsActionBarActivityimplementsTabListener{


3、创建TabsPagerAdapter继承FragmentPagerAdapter

packagecom.example.tabswithswie.adatper;importandroid.support.v4.app.Fragment;importandroid.support.v4.app.FragmentManager;importandroid.support.v4.app.FragmentPagerAdapter;importcom.example.tabswithswie.fragments.AppFragment;importcom.example.tabswithswie.fragments.GamesFragment;importcom.example.tabswithswie.fragments.MoviesFragment;publicclassTabsPagerAdapterextendsFragmentPagerAdapter{publicTabsPagerAdapter(FragmentManagerfm){super(fm);//TODOAuto-generatedconstructorstub}@OverridepublicFragmentgetItem(intindex){switch(index){case0:returnnewAppFragment();case1:returnnewGamesFragment();case2:returnnewMoviesFragment();}returnnull;}@OverridepublicintgetCount(){//TODOAuto-generatedmethodstubreturn3;}}

4、创建AppFragment继承android.support.v4.app.Fragment

packagecom.example.tabswithswie.fragments;importcom.example.tabswithswie.R;importandroid.os.Bundle;importandroid.support.v4.app.Fragment;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;publicclassAppFragmentextendsFragment{@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){//TODOAuto-generatedmethodstubreturninflater.inflate(R.layout.fragment_app,container,false);}}

5、创建布局文件fragment_app.xml

<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#43ff00ff"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="这个是应用界面"android:textAppearance="?android:attr/textAppearanceLarge"/></RelativeLayout>


6、创建GamesFragment继承android.support.v4.app.Fragment

packagecom.example.tabswithswie.fragments;importcom.example.tabswithswie.R;importandroid.os.Bundle;importandroid.support.v4.app.Fragment;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;publicclassGamesFragmentextendsFragment{@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){//TODOAuto-generatedmethodstubreturninflater.inflate(R.layout.fragment_game,container,false);}}

7、创建布局文件fragment_game.xml

<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#9445f353"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="游戏"android:textAppearance="?android:attr/textAppearanceLarge"/></RelativeLayout>

8、创建MoviesFragment继承android.support.v4.app.Fragment

packagecom.example.tabswithswie.fragments;importcom.example.tabswithswie.R;importandroid.os.Bundle;importandroid.support.v4.app.Fragment;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;publicclassMoviesFragmentextendsFragment{@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){//TODOAuto-generatedmethodstubreturninflater.inflate(R.layout.fragment_movie,container,false);}}

9、创建布局文件fragment_movie.xml

<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#34fef443"><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="视频"android:textAppearance="?android:attr/textAppearanceLarge"/></RelativeLayout>


10、回到 MainActivity类,添加Tabs到ActionBar中,并处理点击滑动事件。完整代码

packagecom.example.tabswithswie;importandroid.os.Bundle;importandroid.support.v4.app.FragmentTransaction;importandroid.support.v4.view.ViewPager;importandroid.support.v4.view.ViewPager.OnPageChangeListener;importandroid.support.v7.app.ActionBar;importandroid.support.v7.app.ActionBar.Tab;importandroid.support.v7.app.ActionBar.TabListener;importandroid.support.v7.app.ActionBarActivity;importcom.example.tabswithswie.adatper.TabsPagerAdapter;publicclassMainActivityextendsActionBarActivityimplementsTabListener{privateViewPagerviewPager;privateActionBaractionBar;privateTabsPagerAdaptermTabsPagerAdapter;privateString[]tabs={"应用","游戏","视频"};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取viewpagerviewPager=(ViewPager)findViewById(R.id.pager);//实例化pageradaptermTabsPagerAdapter=newTabsPagerAdapter(getSupportFragmentManager());viewPager.setAdapter(mTabsPagerAdapter);//获取适配的actionbaractionBar=getSupportActionBar();//设置home按钮不可点击actionBar.setHomeButtonEnabled(false);//设置顶部导航的模式-tabsactionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);//添加标签for(Stringtab:tabs){actionBar.addTab(actionBar.newTab().setText(tab).setTabListener(this));}//设置ViewPager切换时候的监听事件viewPager.setOnPageChangeListener(newOnPageChangeListener(){@OverridepublicvoidonPageSelected(intposition){//页面滑动,顶部标签跟着改变actionBar.setSelectedNavigationItem(position);}@OverridepublicvoidonPageScrolled(intarg0,floatarg1,intarg2){//TODOAuto-generatedmethodstub}@OverridepublicvoidonPageScrollStateChanged(intarg0){//TODOAuto-generatedmethodstub}});}@OverridepublicvoidonTabReselected(Tabarg0,FragmentTransactionarg1){//TODOAuto-generatedmethodstub}@OverridepublicvoidonTabSelected(Tabtab,FragmentTransactionfragmentTransaction){//tab选中,切换viewpagerviewPager.setCurrentItem(tab.getPosition());}@OverridepublicvoidonTabUnselected(Tabarg0,FragmentTransactionarg1){//TODOAuto-generatedmethodstub}}


代码就是这样的,搞定收工了。示例代码下载