ActionBarSherlock+SlidingMenu打造侧边栏

从网上转的,直接拿过来用就行了,没什么好解释的,最近也用网上的这个开源的东西做了一个应用,觉得挺好的。下面的是摘自网上其他兄弟的

1.准备两个library

slidingmenu:https://github.com/jfeinstein10/SlidingMenu

actionbarsherlock:http://actionbarsherlock.com/(下载的是4.3.1版本)

2.编译library

actionbarsherlock:import android项目JakeWharton-ActionBarSherlock-071a61c/library, 导入android-support-v4.jar。这个项目是作为一个library的。 

  slidingmenu:import SlidingMenu-master/library文件夹下的代码。右键点击SlidingMenuLibrary,点击Properties,选择Android选项,点击窗口右下方的Add按钮,在弹出的对话框中选中ActionBarSherlockLibrary项目后点击对话框中的OK按钮(选择完成如下图),然后点击Properties界面右下角的OK按钮保存,如此一来ActionBarSherlockLibrary就作为一个library被SlidingMenuLibrary引用进来啦。



以上完成后,打开SlidingMenuLibrary工程src文件下com.slidingmenu.lib.app包下的SlidingFragmentActivity.java,将


public class SlidingFragmentActivity extends FragmentActivity implements SlidingActivityBase
修改为:


public class SlidingFragmentActivity extends SherlockFragmentActivity implements SlidingActivityBase


此时,SlidingMenu的library就和ActionBarSherlock的library结合在一起啦!接下来就是新建一个工程来使用SlidingMenuLibrary啦

将下载下来的SlidingMenu-master/example文件夹下的项目import成为新项目SlidingMenu右键点击SlidingMenu,点击Properties,选择Android选项,点击窗口右下方的Add按钮,在弹出的对话框中选中SlidingMenuLibrary项目后点击对话框中的OK按钮,然后点击Properties界面右下角的OK按钮保存,如此一来SlidingMenuLibrary就作为一个library被SlidingMenu引用进来啦(相当于SlidingMenu中导入SlidingMenuLibrary,而SlidingMenuLibrary中导入ActionBarSherlockLibrary)。




slidingbar的各种属性

slidingMenu = getSlidingMenu();
//设置是左滑还是右滑,还是左右都可以滑
        slidingMenu.setMode(SlidingMenu.LEFT_RIGHT);
//设置阴影宽度
        slidingMenu.setShadowWidth(getWindowManager().getDefaultDisplay().getWidth() / 40);
//设置左菜单阴影图片
        slidingMenu.setShadowDrawable(R.drawable.shadow);
//设置右菜单阴影图片
        slidingMenu.setSecondaryShadowDrawable(R.drawable.right_shadow);
//设置菜单占屏幕的比例
        slidingMenu.setBehindOffset(getWindowManager().getDefaultDisplay().getWidth() / 5);
//设置滑动时菜单的是否淡入淡出
        slidingMenu.setFadeEnabled(true);
//设置淡入淡出的比例
        slidingMenu.setFadeDegree(0.4f);
//设置滑动时拖拽效果
        slidingMenu.setBehindScrollScale(0);
//设置要使菜单滑动,触碰屏幕的范围
        slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

//设置拉出的菜单的宽度

slidingMenu.setBehindWidth((int) (percent * getSlidingMenu().getWidth));


//设置actionbar是否跟随拖动

SlidingFragmentActivity.setSlidingActionBarEnabled(true)


==============================================

先简单介绍下SlidingMenu和ViewPager.

ViewPager就是一个官方提供的多页面滑动组件,需要一个适配器来构建多个页面.

先来看看ViewPager对应的基本适配器PageAdapter,需要实现以下方法

getCount() 
这个方法,是获取当前窗体界面数
isViewFromObject() 
判断是否由对象生成 的view ,一般写法都比较固定
如:return object == view;
instantiateItem(ViewGroup, int) 
这个方法,return一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPager中 
destroyItem(ViewGroup, int, Object) 
这个方法,是从ViewGroup中移出当前View
finishUpdate(ViewGroup container)
在UI更新后完成的动作

ViewPager对应的监听器是PageChangeListner 
当页面改变时触发

一般使用一个简单的子类监听器是SimpleOnPageChangeListener

onPageSelected(int position)
页卡选中的方法

平常使用FragmentPagerAdapter和FragmentStatePagerAdapter来构建ViewPager
FragmentPagerAdapter更多的用于少量界面的ViewPager,比如Tab划过的fragment会保存在内存中,尽管已经划过。
而FragmentStatePagerAdapter和ListView有点类似,会保存当前界面,以及下一个界面和上一个界面(如果有),最多保存3个,其他会被销毁掉。
注意的是FragmentStatePagerAdapter可能不经意间会造成内存未正常回收,严重导致内存溢出,比如图片资源没有释放,资源引用问题

setOffscreenPageLimit(int) 
设置预加载TAB页卡数量,默认是1,就是当前页卡显示的时候,预先加载下一个页卡.数量不能太大.设为0即不進行预加载



SlidingMenu

使用方法:

 首先,Activity要继承自SlidingFragmentActivity,而SlidingFragmentActivity又继承自SherlockFragmentActivity并实现SlidingActivityBase接口提供相应方法


左侧、右侧和两边
在BaseActivity中将SlidingMenu默认设置左面菜单,全屏可拉动及其他一些属性,下面看代码:
   // 设置menu布局,根据模式决定是从左侧还是右侧拉出
        setBehindContentView(R.layout.menu_frame);
        FragmentTransaction t = this.getSupportFragmentManager().beginTransaction();
        mFrag = new SampleListFragment();
        t.replace(R.id.menu_frame, mFrag);
        t.commit();
        //SlidingMenu控件的初始化
        SlidingMenu sm = getSlidingMenu();
        sm.setShadowWidthRes(R.dimen.shadow_width);//阴影宽度
        sm.setShadowDrawable(R.drawable.shadow);//阴影Drawable
        sm.setBehindOffsetRes(R.dimen.slidingmenu_offset);//拉开后离边框距离
        sm.setFadeDegree(0.35f); //颜色渐变比例
        sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); //拉动事件区域 --全屏
        getSupportActionBar().setDisplayHomeAsUpEnabled(true); //ActionBar返回启用


设置SlidingMenu的模式: 
        // 设置左侧menu
        sm.setMode(SlidingMenu.LEFT);      
      // 设置右侧menu
        sm.setMode(SlidingMenu.RIGHT);
当设置左右两侧时要注意,因为前面只添加了一个菜单布局,所以这里我们要另外再设置一个: 
        // 设置左右侧都有
        sm.setMode(SlidingMenu.LEFT_RIGHT);
        // 此时要再次添加布局菜单,上一个为左侧,这个为右侧
        sm.setSecondaryMenu(R.layout.menu_frame_two);
        getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.menu_frame_two,
                  new SampleListFragment()).commit();
        sm.setSecondaryShadowDrawable(R.drawable.shadowright);


可拉动触控范围
这个更简单,不多说:
        switch (checkedId) {
           case R.id.touch_above_full:
            // 设置触摸拖动模式--全屏
            getSlidingMenu().setTouchModeAbove(
                     SlidingMenu.TOUCHMODE_FULLSCREEN);
            break;
           case R.id.touch_above_margin:
            // 设置触摸拖动模式--边缘
            getSlidingMenu().setTouchModeAbove(
                     SlidingMenu.TOUCHMODE_MARGIN);
            break;
           case R.id.touch_above_none:
            // 设置触摸拖动模式--关闭
            getSlidingMenu().setTouchModeAbove(
                     SlidingMenu.TOUCHMODE_NONE);
            break;
        }


放缩比例
// 放缩比例
                getSlidingMenu().setBehindScrollScale(
                         (float) seekBar.getProgress() / seekBar.getMax());


拉出菜单宽度
// 菜单宽度(源码中作者把该操作隐藏)
                getSlidingMenu().setBehindWidth(
                         (int) (percent * getSlidingMenu().getWidth()));
                getSlidingMenu().requestLayout();


阴影
有无阴影
if (isChecked)
// 是否有阴影
   getSlidingMenu()
        .setShadowDrawable(
            getSlidingMenu().getMode() == SlidingMenu.LEFT ? R.drawable.shadow: R.drawable.shadowright);
 else
   getSlidingMenu().setShadowDrawable(null);


阴影宽度
// 设置阴影宽度
getSlidingMenu().setShadowWidth(width);
getSlidingMenu().invalidate();


颜色渐变


有无渐变
getSlidingMenu().setFadeEnabled(isChecked);


渐变比率
// 颜色渐变比例
getSlidingMenu().setFadeDegree(
        (float) seekBar.getProgress() / seekBar.getMax());


代码部分

  1. package com.light.android.study;  
  2.   
  3. import com.light.android.study.fragment.ContentFragment;  
  4. import com.light.android.study.fragment.MenuFragment;  
  5. import com.slidingmenu.lib.SlidingMenu;  
  6. import com.slidingmenu.lib.app.SlidingActivity;  
  7. import android.os.Bundle;  
  8. import android.view.MenuItem;  
  9. import android.app.ActionBar;  
  10. import android.app.FragmentTransaction;  
  11.   
  12. public class MainActivity extends SlidingActivity{  
  13.     private FragmentTransaction transaction;  
  14.     private ContentFragment contentFragment;  
  15.     private MenuFragment menuFragment;  
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.content_page);  
  20.           
  21.         setBehindContentView(R.layout.menu_page);  
  22.         menuFragment = new MenuFragment();  
  23.         contentFragment = new ContentFragment("welcome!Kris Light!");  
  24.         transaction = getFragmentManager().beginTransaction();  
  25.         transaction.replace(R.id.menu,menuFragment,"menu");  
  26.         transaction.replace(R.id.content,contentFragment,"content");  
  27.         transaction.commit();  
  28.         //設置ActionBar為TAB頁簽模式  
  29.         getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
  30.         //初始化SlidingMenu  
  31.         initSlidingMenu();  
  32.     }  
  33.   
  34.     private void initSlidingMenu() {  
  35.   
  36.         //SlidingMenu控件的初始化 使用默認的Right模式,菜單在右邊  
  37.         SlidingMenu sm = getSlidingMenu();  
  38.       //阴影宽度  
  39.         sm.setShadowWidth(50);  
  40.       //阴影Drawable  
  41.         sm.setShadowDrawable(R.drawable.shadow);  
  42.       //拉开后离边框距离  
  43.         sm.setBehindOffset(80);  
  44.       //颜色渐变比例  
  45.         sm.setFadeDegree(0.35f);  
  46.           
  47.         //设置slding menu的几种手势模式  
  48.         //TOUCHMODE_FULLSCREEN 全屏模式,在content页面中,滑动,可以打开sliding menu  
  49.         //TOUCHMODE_MARGIN 边缘模式,在content页面中,如果想打开slding ,你需要在屏幕边缘滑动才可以打开slding menu  
  50.         //TOUCHMODE_NONE 自然是不能通过手势打开啦  
  51.         sm.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);  
  52.   
  53.         //使用左上方icon可点,这样在onOptionsItemSelected里面才可以监听到R.id.home  
  54.         getActionBar().setDisplayHomeAsUpEnabled(true);  
  55.     }  
  56.       
  57.     @Override  
  58.     public boolean onOptionsItemSelected(MenuItem item) {  
  59.         if(item.getItemId()== android.R.id.home){  
  60.             toggle();  
  61.         }  
  62.         return super.onOptionsItemSelected(item);  
  63.     }  
  64. }  

  1. package com.light.android.study;  
  2.   
  3. import android.app.Fragment;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.view.LayoutInflater;  
  7. import android.view.Menu;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.TextView;  
  11.   
  12. public class PageFragment extends Fragment {  
  13.      
  14.     private String text;  
  15.       
  16.     public PageFragment(){  
  17.           
  18.     }   
  19.       
  20.     public String getText() {  
  21.         return text;  
  22.     }  
  23.   
  24.     public void setText(String text) {  
  25.         this.text = text;  
  26.     }  
  27.   
  28.     public PageFragment(String t){  
  29.         this.text = t;  
  30.     }  
  31.   
  32.     @Override  
  33.     public void onCreate(Bundle savedInstanceState) {  
  34.         super.onCreate(savedInstanceState);  
  35.         setRetainInstance(true);  
  36.     }  
  37.   
  38.   
  39.     @Override  
  40.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  41.             Bundle savedInstanceState) {  
  42.         Log.i("Light""onCreateView "+text);  
  43.         View view = inflater.inflate(R.layout.fragment_page_layout, null);  
  44.         TextView tv = (TextView) view.findViewById(R.id.tv);  
  45.         tv.setText(text);  
  46.         return view;  
  47.     }  
  48. }  

  1. package com.light.android.study.adapter;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import com.light.android.study.PageFragment;  
  6. import android.app.Fragment;  
  7. import android.app.FragmentManager;  
  8. import android.app.FragmentTransaction;  
  9. import android.support.v4.view.PagerAdapter;  
  10. import android.view.View;  
  11. import android.view.ViewGroup;  
  12.   
  13. public class ContentPageAdapter extends PagerAdapter{  
  14.   
  15.     private List<PageFragment> pageList = new ArrayList<PageFragment>();  
  16.     private FragmentManager fragmentManager;  
  17.     private FragmentTransaction transaction;  
  18.       
  19.     public ContentPageAdapter(List<PageFragment> list,FragmentManager manager){  
  20.         this.pageList = list;  
  21.         this.fragmentManager = manager;  
  22.         transaction = manager.beginTransaction();  
  23.     }  
  24.       
  25.     //获取当前窗体界面数  
  26.     @Override  
  27.     public int getCount() {  
  28.         return pageList.size();  
  29.     }  
  30.   
  31.     //判断是否是由对象生成的View  
  32.     @Override  
  33.     public boolean isViewFromObject(View view, Object object) {  
  34.         return ((Fragment) object).getView() == view;  
  35.     }  
  36.   
  37.     //这个方法,return一个对象,这个对象表明了PagerAdapter适配器选择哪个对象放在当前的ViewPager中   
  38.     @Override  
  39.     public Object instantiateItem(ViewGroup container, int position) {  
  40.          if(transaction==null){  
  41.              transaction = fragmentManager.beginTransaction();  
  42.          }  
  43.          //先判斷之前是否有attach過這個Fragment,有的話直接重新attach綁定  
  44.          String tag = pageList.get(position).getText();  
  45.          PageFragment fragment = (PageFragment) fragmentManager.findFragmentByTag(tag);  
  46.          if(fragment!=null){  
  47.              transaction.attach(fragment);  
  48.          }else{  
  49.              //沒有attach過直接add  
  50.              fragment = pageList.get(position);  
  51.              transaction.add(container.getId(),fragment,fragment.getText());  
  52.          }  
  53.          return fragment;  
  54.     }  
  55.       
  56.      /** 
  57.      * 此方法是移当前Object 
  58.      */  
  59.     @Override  
  60.     public void destroyItem(ViewGroup container, int position, Object object) {  
  61.         if (transaction == null) {  
  62.             transaction = fragmentManager.beginTransaction();  
  63.         }  
  64.         //detach解除綁定  
  65.         transaction.detach((Fragment) object);  
  66.     }  
  67.      
  68.    /** 
  69.      *  在UI更新完成后的动作 
  70.      */  
  71.    @Override  
  72.    public void finishUpdate(ViewGroup container) {  
  73.       if(transaction!=null){  
  74.           //提交  
  75.           transaction.commitAllowingStateLoss();  
  76.           transaction = null;  
  77.           //立即執行事務  
  78.           fragmentManager.executePendingTransactions();  
  79.       }  
  80.    }  
  81. }  

  1. package com.light.android.study.fragment;  
  2.   
  3.   
  4. import com.light.android.study.R;  
  5. import android.app.Fragment;  
  6. import android.os.Bundle;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10. import android.widget.TextView;  
  11.   
  12.   
  13. public class ContentFragment extends Fragment {  
  14.   
  15.     private String title;  
  16.       
  17.     public ContentFragment(){  
  18.     }  
  19.       
  20.     public ContentFragment(String title){  
  21.         this.title = title;  
  22.     }  
  23.   
  24.     @Override  
  25.     public void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         //設置Fragment不重建       
  28.         setRetainInstance(true);  
  29.     }  
  30.       
  31.     @Override  
  32.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  33.             Bundle savedInstanceState) {  
  34.         View convertView = inflater.inflate(R.layout.fragment_page_layout, null);  
  35.         TextView tv = (TextView) convertView.findViewById(R.id.tv);  
  36.         tv.setText(title);  
  37.         return convertView;  
  38.     }  
  39. }  

  1. package com.light.android.study.fragment;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5. import android.app.ActionBar;  
  6. import android.app.ActionBar.Tab;  
  7. import android.app.FragmentTransaction;  
  8. import android.os.Bundle;  
  9. import android.preference.Preference;  
  10. import android.preference.PreferenceFragment;  
  11. import android.support.v4.view.ViewPager;  
  12. import android.view.View;  
  13. import android.widget.FrameLayout;  
  14. import com.light.android.study.MainActivity;  
  15. import com.light.android.study.PageFragment;  
  16. import com.light.android.study.R;  
  17. import com.light.android.study.adapter.ContentPageAdapter;  
  18. import com.slidingmenu.lib.SlidingMenu;  
  19.   
  20. public class MenuFragment extends PreferenceFragment {  
  21.     private List<PageFragment> pageList = new ArrayList<PageFragment>();  
  22.     private MainActivity mActivity;   
  23.     private ViewPager pager;  
  24.     FrameLayout mFrameLayout;  
  25.     private ContentPageAdapter adapter;  
  26.     private int index = -1;  
  27.   
  28.     public MenuFragment() {  
  29.     }  
  30.       
  31.     @Override  
  32.     public void onCreate(Bundle savedInstanceState) {  
  33.         super.onCreate(savedInstanceState);  
  34.         setRetainInstance(true);  
  35.         addPreferencesFromResource(R.xml.menu);  
  36.     }  
  37.       
  38.     @Override  
  39.     public void onActivityCreated(Bundle savedInstanceState) {  
  40.         super.onActivityCreated(savedInstanceState);  
  41.         mActivity = (MainActivity) getActivity();  
  42.         pager = (ViewPager) mActivity.findViewById(R.id.viewpager);  
  43.         mFrameLayout = (FrameLayout)mActivity.findViewById(R.id.content);  
  44.         findPreference("chunqiu").setOnPreferenceClickListener(onPreferenceClickListener);  
  45.         findPreference("zhanguo").setOnPreferenceClickListener(onPreferenceClickListener);  
  46.         findPreference("han").setOnPreferenceClickListener(onPreferenceClickListener);  
  47.         findPreference("sanguo").setOnPreferenceClickListener(onPreferenceClickListener);  
  48.           
  49.     }  
  50.       
  51.     Preference.OnPreferenceClickListener onPreferenceClickListener = new Preference.OnPreferenceClickListener() {  
  52.           
  53.         //点击一个选项  
  54.         @Override  
  55.         public boolean onPreferenceClick(Preference preference) {  
  56.             String key = preference.getKey();  
  57.             mFrameLayout.setVisibility(View.GONE);  
  58.             //历史  
  59.             //三国  
  60.             if("sanguo".equals(key)){  
  61.                    //刚好是三国这一个选项  
  62.                    if(index == 0) {  
  63.                         mActivity.getSlidingMenu().toggle();  
  64.                         return true;  
  65.                     }  
  66.                   index = 0;  
  67.                   ActionBar actionBar =  mActivity.getActionBar();  
  68.                   actionBar.removeAllTabs();  
  69.                    //清空  
  70.                   pageList.clear();  
  71.                   actionBar.addTab(actionBar.newTab().setText("魏").setTabListener(tablistener));  
  72.                   PageFragment weiFragment = new PageFragment("魏");   
  73.                   pageList.add(weiFragment);  
  74.                   actionBar.addTab(actionBar.newTab().setText("蜀").setTabListener(tablistener));  
  75.                   PageFragment shuFragment = new PageFragment("蜀");   
  76.                   pageList.add(shuFragment);  
  77.                   actionBar.addTab(actionBar.newTab().setText("吴").setTabListener(tablistener));  
  78.                   PageFragment wuFragment = new PageFragment("吴");   
  79.                   pageList.add(wuFragment);  
  80.                   adapter = new ContentPageAdapter(pageList,mActivity.getFragmentManager());  
  81.                   //設置PagerView預加載View數量  
  82.                   pager.setOffscreenPageLimit(2);  
  83.                   //为ViewPager设置Adapter  
  84.                   pager.setAdapter(adapter);  
  85.                   //設置Page改變監聽器  
  86.                   pager.setOnPageChangeListener(onPageChangeListener);  
  87.                     
  88.             }else if("han".equals(key)){  
  89.                    //汉代  
  90.                    //刚好是汉这一个选项  
  91.                    if(index == 1) {  
  92.                         mActivity.getSlidingMenu().toggle();  
  93.                         return true;  
  94.                     }  
  95.                    index = 1;  
  96.                   ActionBar actionBar =  mActivity.getActionBar();  
  97.                   //清空一次  
  98.                   actionBar.removeAllTabs();  
  99.                   pageList.clear();  
  100.                   actionBar.addTab(actionBar.newTab().setText("汉").setTabListener(tablistener));  
  101.                   PageFragment hanFragment = new PageFragment("汉");   
  102.                   pageList.add(hanFragment);  
  103.                   actionBar.addTab(actionBar.newTab().setText("楚").setTabListener(tablistener));  
  104.                   PageFragment chuFragment = new PageFragment("楚");   
  105.                   pageList.add(chuFragment);  
  106.                   adapter = new ContentPageAdapter(pageList,mActivity.getFragmentManager());  
  107.                   //設置PagerView預加載View數量  
  108.                   pager.setOffscreenPageLimit(1);  
  109.                   //为ViewPager设置Adapter  
  110.                   pager.setAdapter(adapter);  
  111.                   //設置Page改變監聽器  
  112.                   pager.setOnPageChangeListener(onPageChangeListener);  
  113.             }else if("zhanguo".equals(key)){  
  114.                    //战国  
  115.                    //刚好是战国这一个选项  
  116.                    if(index == 2) {  
  117.                         mActivity.getSlidingMenu().toggle();  
  118.                         return true;  
  119.                     }  
  120.                    index = 2;  
  121.                   ActionBar actionBar =  mActivity.getActionBar();  
  122.                   //清空一次  
  123.                   actionBar.removeAllTabs();  
  124.                   pageList.clear();  
  125.                   actionBar.addTab(actionBar.newTab().setText("戰國").setTabListener(tablistener));  
  126.                   PageFragment zgFragment = new PageFragment("戰國");   
  127.                   pageList.add(zgFragment);  
  128.                   adapter = new ContentPageAdapter(pageList,mActivity.getFragmentManager());  
  129.                   //为ViewPager设置Adapter  
  130.                   pager.setAdapter(adapter);  
  131.                   //設置Page改變監聽器  
  132.                   pager.setOnPageChangeListener(onPageChangeListener);  
  133.                     
  134.             }else if("chunqiu".equals(key)){  
  135.                    //春秋  
  136.                    //刚好是春秋这一个选项  
  137.                    if(index == 3) {  
  138.                         mActivity.getSlidingMenu().toggle();  
  139.                         return true;  
  140.                     }  
  141.                    index = 3;  
  142.                   ActionBar actionBar =  mActivity.getActionBar();  
  143.                   //清空一次  
  144.                   actionBar.removeAllTabs();  
  145.                   pageList.clear();  
  146.                   actionBar.addTab(actionBar.newTab().setText("春秋").setTabListener(tablistener));  
  147.                   PageFragment cqFragment = new PageFragment("春秋");   
  148.                   pageList.add(cqFragment);  
  149.                   adapter = new ContentPageAdapter(pageList,mActivity.getFragmentManager());  
  150.                   //为ViewPager设置Adapter  
  151.                   pager.setAdapter(adapter);  
  152.                   //設置Page改變監聽器  
  153.                   pager.setOnPageChangeListener(onPageChangeListener);  
  154.             }  
  155.             //无论如何将菜单开关动作交给SlidingMenu管理  
  156.             mActivity.getSlidingMenu().toggle();  
  157.             return false;  
  158.         }  
  159.     };  
  160.       
  161.       /** 
  162.      * SimpleOnPageChangeListener.该监听是当我们的viewpager页面切换的时候会触发  
  163.      * 在里面我们会去改变 tab的聚焦情况 。 
  164.      * 因为实现上viewpager与actionbar是独立的,需要我们手动同步 。 
  165.      */  
  166.     ViewPager.SimpleOnPageChangeListener onPageChangeListener = new ViewPager.SimpleOnPageChangeListener() {  
  167.         @Override  
  168.         public void onPageSelected(int position) {  
  169.             /** 
  170.              *  setSelectedNavigationItem 方法用于设置ActionBar的聚焦tab .   
  171.              *  在接下来我们判断了SLidingMenu的手势力模式, 
  172.              *  如果ViewPager已经滑到了最左边,则我们把手势设置成全屏的, 
  173.              *  这样更往左滑动的时候,就会打开Menu . 
  174.              */  
  175.             getActivity().getActionBar().setSelectedNavigationItem(position);  
  176.             switch (position) {  
  177.                 //滑到最左邊頁卡設置SlidingMenu滑動手勢可全屏即右滑出菜單  
  178.                 case 0:  
  179.                     getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);  
  180.                     break;  
  181.                 default:  
  182.                     getSlidingMenu().setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);  
  183.                     break;  
  184.             }  
  185.         }  
  186.   
  187.     };  
  188.       
  189.     ActionBar.TabListener tablistener = new ActionBar.TabListener() {  
  190.           
  191.         @Override  
  192.         public void onTabUnselected(Tab tab, FragmentTransaction ft) {  
  193.               
  194.         }  
  195.           
  196.         @Override  
  197.         public void onTabSelected(Tab tab, FragmentTransaction ft) {  
  198.               if (pager.getCurrentItem() != tab.getPosition())  
  199.                    pager.setCurrentItem(tab.getPosition());  
  200.         }  
  201.           
  202.         @Override  
  203.         public void onTabReselected(Tab tab, FragmentTransaction ft) {  
  204.               
  205.         }  
  206.     };  
  207.       
  208.     private SlidingMenu getSlidingMenu() {  
  209.             return ((MainActivity)getActivity()).getSlidingMenu();  
  210.     }  
  211. }  


content_fragment_layout.xml:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <Fragment xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.       
  7.   
  8. </Fragment>  


content_page.xml:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <FrameLayout  
  8.         android:id="@+id/content"  
  9.         android:layout_width="match_parent"  
  10.         android:layout_height="match_parent" >  
  11.     </FrameLayout>  
  12.   
  13.     <android.support.v4.view.ViewPager  
  14.         android:id="@+id/viewpager"  
  15.         android:layout_width="match_parent"  
  16.         android:layout_height="match_parent"   
  17.         />  
  18.   
  19. </FrameLayout>  


fragment_page_layout.xml:
  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context=".PageActivity" >  
  6.   
  7.     <TextView  
  8.         android:id="@+id/tv"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_gravity="center"  
  12.         android:text="page"  
  13.        />  
  14.   
  15. </FrameLayout>  


menu_page.xml
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     xmlns:tools="http://schemas.android.com/tools"  
  4.     android:id="@+id/menu"  
  5.     android:layout_width="match_parent"  
  6.     android:layout_height="match_parent"  
  7.     tools:context=".MainActivity" >  
  8. </FrameLayout>  









更新:

源代码已上传:http://download.csdn.net/detail/u011176244/6227395 

需要另外导入SlidingMenu库 网上有很多教程如何使用这个库。




  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值