ActionBarSherlock的Tab与ViewPager的结合_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > ActionBarSherlock的Tab与ViewPager的结合

ActionBarSherlock的Tab与ViewPager的结合

 2013/9/2 19:33:53  depeng  博客园  我要评论(0)
  • 摘要:最近在一个小项目里遇见一个问题,就是用TabWidget加上ViewPager做出一个可以滑动的Tab效果。效果在Android2.3上显示效果还是可以的,但是在4.0系统上就会使TabWeight变成holo风格。如果在Tabweight里面添加了文字和图标。在4.0系统中默认只显示文字(文字为空时显示图标)。同一个应用,两种显示效果,对我来说是接受不了的。然后在网上搜了一圈找到一个解决办法:http://stackoverflow.com/questions/10745092/icon
  • 标签:view 结合 NBA

最近在一个小项目里遇见一个问题,就是用TabWidget加上ViewPager做出一个可以滑动的Tab效果。效果在Android2.3上显示效果还是可以的,但是在4.0系统上就会使 TabWeight变成holo风格。如果在Tabweight里面添加了文字和图标。在4.0系统中默认只显示文字(文字为空时显示图标)。

同一个应用,两种显示效果,对我来说是接受不了的。

然后在网上搜了一圈

找到一个解决办法:http://stackoverflow.com/questions/10745092/icon-in-tab-is-not-showing-up

但是我觉得这样自定义TabWeight会把一个简单的问题越搞越复杂

初衷只是做一个可以滑动的TAB界面,这样用tabhost,ViewPager,还要自定义TabWeight,感觉结构就太繁琐了。不如把问题简单化。

把风格确定为holo风格,为了兼容4.0之前的版本,使用ActionBarSherlock包

ActionBarSherlock可以去网站下 http://actionbarsherlock.com/download.html

也可以去GIT上找 https://github.com/JakeWharton/ActionBarSherlock

使用ActionBarSherlock里的tab,holo风格比较简洁,索性也就不加icon图标什么的了。

就不贴自己的代码了,网上找了个例子,把关键代码贴一下,有兴趣的还是去原帖看看吧,很详细。

 

 

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{
 
    final int PAGE_COUNT = 2;
 
    /** Constructor of the class */
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }
 
    /** This method will be invoked when a page is requested to create */
    @Override
    public Fragment getItem(int arg0) {
        Bundle data = new Bundle();
        switch(arg0){
            /** Android tab is selected */
            case 0:
                AndroidFragment androidFragment = new AndroidFragment();
                data.putInt("current_page", arg0+1);
                androidFragment.setArguments(data);
                return androidFragment;
 
            /** Apple tab is selected */
            case 1:
                AppleFragment appleFragment = new AppleFragment();
                data.putInt("current_page", arg0+1);
                appleFragment.setArguments(data);
                return appleFragment;
        }
        return null;
    }
 
    /** Returns the number of pages */
    @Override
    public int getCount() {
        return PAGE_COUNT;
    }
}

 

 

主MainActivity的代码,然后里面的FragmentActivity就随便加两个就行了
public class MainActivity extends SherlockFragmentActivity {
    ActionBar mActionBar;
    ViewPager mPager;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        /** Getting a reference to action bar of this activity */
        mActionBar = getSupportActionBar();
 
        /** Set tab navigation mode */
        mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
 
        /** Getting a reference to ViewPager from the layout */
        mPager = (ViewPager) findViewById(R.id.pager);
 
        /** Getting a reference to FragmentManager */
        FragmentManager fm = getSupportFragmentManager();
 
        /** Defining a listener for pageChange */
        ViewPager.SimpleOnPageChangeListener pageChangeListener = new ViewPager.SimpleOnPageChangeListener(){
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                mActionBar.setSelectedNavigationItem(position);
            }
        };
 
        /** Setting the pageChange listner to the viewPager */
        mPager.setOnPageChangeListener(pageChangeListener);
 
        /** Creating an instance of FragmentPagerAdapter */
        MyFragmentPagerAdapter fragmentPagerAdapter = new MyFragmentPagerAdapter(fm);
 
        /** Setting the FragmentPagerAdapter object to the viewPager object */
        mPager.setAdapter(fragmentPagerAdapter);
 
        mActionBar.setDisplayShowTitleEnabled(true);
 
        /** Defining tab listener */
        ActionBar.TabListener tabListener = new ActionBar.TabListener() {
 
            @Override
            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            }
 
            @Override
            public void onTabSelected(Tab tab, FragmentTransaction ft) {
                mPager.setCurrentItem(tab.getPosition());
            }
 
            @Override
            public void onTabReselected(Tab tab, FragmentTransaction ft) {
            }
        };
 
        /** Creating Android Tab */
        Tab tab = mActionBar.newTab()
                .setText("Android")
                .setIcon(R.drawable.android)
                .setTabListener(tabListener);
 
        mActionBar.addTab(tab);
 
        /** Creating Apple Tab */
        tab = mActionBar.newTab()
                .setText("Apple")
                .setIcon(R.drawable.apple)
                .setTabListener(tabListener);
 
        mActionBar.addTab(tab);
 
    }
 
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getSupportMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

 

 

 

例子的链接http://wptrafficanalyzer.in/blog/implement-swiping-between-tabs-with-viewpager-in-action-bar-using-sherlock-library/ 有兴趣的同学去看看吧

上一篇: IIS处理并发请求时出现的问题及解决 下一篇: 没有下一篇了!
发表评论
用户名: 匿名