可左右滑动的Tab页布局的好处在于,用单手左右滑动操作即可,而无须去点击切换Tab页。
效果如下:
 


实现步骤如下:
1. 在XML布局文件中指定ViewPager。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/vPager"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1.0"
android:background="#000000"
android:flipInterval="30"
android:persistentDrawingCache="animation" />
</LinearLayout>
 
2. 直接上代码
工程中 ActionBarActivity 引用自android-support-v7-appcompat扩展包。
   具体引用方法可参考点击打开链接
public class TabBar3Activity extends ActionBarActivity{
    private ActionBar actionBar;
    private ViewPager mPager;
    private ArrayList<View> mViews = null;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tabbar);
        //得到Bar
        actionBar = getSupportActionBar();
        
        //设置标题
        actionBar.setTitle("ActionBar+ViewPager");
        actionBar.setSubtitle("努力!");
        
        //实现用户点击ActionBar 图标后返回前一个activity
        actionBar.setDisplayHomeAsUpEnabled(true) ;
               
        //定义ActionBar模式为NAVIGATION_MODE_TABS
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);      
        actionBar.addTab(actionBar.newTab()
                .setText("t1")
                .setIcon(R.drawable.ic_launcher)
                .setTabListener(MyBarTabListener));
             
        actionBar.addTab(actionBar.newTab()
                .setText("t2")
                .setIcon(R.drawable.ic_launcher)
                .setTabListener(MyBarTabListener));
        
        mPager = (ViewPager)findViewById(R.id.vPager);
                
        /*---------------------------------------------------------------------------
            方法一:*/
        /*
         * 
         *  LayoutInflater  用于找layout下xml布局文件,并且实例化
         *  而findViewById()是找xml下具体的widget控件
         *  所以这两个作用应用场景分别如下 :
         *   1.对于没有被载入或想要动态载入的界面,都需要inflate来载入
         *   2.对于一个已经载入的Activity,则可以用 findViewById()来获得界面控制元素
         */
    
        //将要分页显示的View装入数组中
        LayoutInflater layFlater = LayoutInflater.from(this);
        View view1 = layFlater.inflate(R.layout.activity_tabbar_page1, null);
        View view2 = layFlater.inflate(R.layout.activity_tabbar_page2, null);
        
        //每个页面的Title数据
        mViews = new ArrayList<View>();
        mViews.add(view1);
        mViews.add(view2);
        mPager.setAdapter(MyPagerAdapter);
      
        mPager.setOnPageChangeListener(new MyPageScrollEvent());      
        mPager.setCurrentItem(0);
    }
    @SuppressLint("NewApi") @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        //添加菜单项  
        MenuItem findItem = menu.add(0,1,0,"查找");  
        MenuItem exitItem = menu.add(0,0,0,"退出"); 
        
        //绑定到ActionBar    
        findItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);  
        exitItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);  
        
        return true;
    }
    
    
    /**
     * ActionBar上的Tab页更改
     * http://developer.android.com/reference/android/app/ActionBar.TabListener.html
        Public Methods
            onTabReselected(ActionBar.Tab tab, FragmentTransaction ft)
                Called when a tab that is already selected is chosen again by the user.
            
            onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
                Called when a tab enters the selected state.
            
            onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft)
                Called when a tab exits the selected state.
     */       
    private final TabListener MyBarTabListener = new TabListener(){
        private final static String TAG = "MyBarTabListener";
        
        @Override
        public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
            // TODO Auto-generated method stub
            Log.d(TAG,"onTabReselected");
        }
        @Override
        public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
            // TODO Auto-generated method stub
            Log.d(TAG,"onTabSelected");
            //当更改ActionBar上的Tab页有更改时,ViewPager显示相关的页面
            if (mPager != null)  
                mPager.setCurrentItem(arg0.getPosition());
        }
        @Override
        public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
            // TODO Auto-generated method stub
            Log.d(TAG,"onTabUnselected");
        }
    };
    
    /**
     * 填充ViewPager的数据适配器
     */
    private final PagerAdapter MyPagerAdapter = new PagerAdapter() {
        
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }
        
        @Override
        public int getCount() {
            return mViews.size();
        }
        @Override
        public void destroyItem(View container, int position, Object object) {
            ((ViewPager)container).removeView(mViews.get(position));
        }
        //@Override
        //public CharSequence getPageTitle(int position) {
            //return titles.get(position); 
        //}
        @Override
        public Object instantiateItem(View container, int position) {
            ((ViewPager)container).addView(mViews.get(position));
            return mViews.get(position);
        }
    };
    
    
    /**
     * 用于ViewPager滑动时触发.
     * 
     * http://docs.eoeandroid.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html
     onPageScrollStateChanged(int state)
        Called when the scroll state changes.
        
     onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 
            This method will be invoked when the current 
            page is scrolled, either as part of a programmatically initiated 
            smooth scroll or a user initiated touch scroll.
            
     onPageSelected(int position)
            This method will be invoked when a new page becomes selected.
     */    
    class MyPageScrollEvent implements OnPageChangeListener
    {
        private final static String TAG = "MyPageScrollEvent";
        @Override
        public void onPageScrollStateChanged(int arg0) {
            // TODO Auto-generated method stub
            Log.d(TAG,"onPageScrollStateChanged");
        }
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            // TODO Auto-generated method stub
            Log.d(TAG,"onPageScrolled");
        }
        @Override
        public void onPageSelected(int arg0) {
            // TODO Auto-generated method stub
            Log.d(TAG,"onPageSelected");
            //当滑动ViewPager 换页时,将ActionBar上的Tab显示到对应页
            actionBar.selectTab(actionBar.getTabAt(arg0));
        }       
    }
    
    
    /**
     * 菜单事件响应
     */
    public boolean onOptionsItemSelected(MenuItem item) {  
        // TODO Auto-generated method stub  
        switch (item.getItemId()) {         
        case 0:  
            //displayToast("退出菜单");
            break;
        case 1:  
            //displayToast("查找菜单");
            break;
        case android.R.id.home:  
            Intent intent = new Intent(this, MainActivity.class);  
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP  
                    | Intent.FLAG_ACTIVITY_NEW_TASK);  
            startActivity(intent);  
            Toast.makeText(getApplicationContext(), "android.R.id.home", 0)  
                    .show();  
            break;  
        default:  //action_compose
            break;  
        }  
        return super.onOptionsItemSelected(item);  
    }  
    
} 










