2012-06-06 15 views
10

我已经创建了使用ViewPagerExtensions的swipey选项卡,但是这次我在应用程序中只使用了一个库ActionBarSherlock,并且我不知道如何创建像Google Play商店这样的swipey选项卡。如果你能帮助我完成它,我会非常感谢你。SwipeyTabs - 如何使用ActionBarSherlock库创建Swipey选项卡?

这是我的活动类

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setTheme(SampleList.THEME); //Used for theme switching in samples 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.fragment_tabs); 
     mTabHost = (TabHost)findViewById(android.R.id.tabhost); 
     mTabHost.setup(); 

     mTabManager = new TabManager(this, mTabHost, R.id.realtabcontent); 

     mTabManager.addTab(mTabHost.newTabSpec("simple").setIndicator("Groups"),FragmentStackSupport.CountingFragment.class, null); 
     mTabManager.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),LoaderCursorSupport.CursorLoaderListFragment.class, null); 
     mTabManager.addTab(mTabHost.newTabSpec("custom").setIndicator("Logs"),LoaderCustomSupport.AppListFragment.class, null); 
     mTabManager.addTab(mTabHost.newTabSpec("throttle").setIndicator("Gallery"),LoaderThrottleSupport.ThrottledLoaderListFragment.class, null); 

     if (savedInstanceState != null) { 
      mTabHost.setCurrentTabByTag(savedInstanceState.getString("tab")); 
     } 
    } 

In first image Top New Paid is the current screen title and other two are showing previous or next screen tile. How can i show previous and next screen title at corner with some fading effect like it.

在第一图像热门付费新品的onCreate方法是当前屏幕的标题和其他两个是显示一个或下一个屏幕像素块。我怎样才能显示前一个和下一个屏幕标题与一些像这样的衰落效果的角落。

+1

我已经在fragment_tabs.xml使用Horizo​​ntalScrollView各地TabWidget创建滚动标签。 –

+0

回答

9

您需要使用ActionBar Tabs,TabsAdapter和ViewPager(滚动位)。以下是我制作的完整教程:http://davidjkelley.net/?p=34(只使用ABS导入,不使用标准兼容库)。

下面是一些相关的代码:

import java.util.ArrayList; 
import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.MenuItem.OnMenuItemClickListener; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPageChangeListener; 
public class Polling extends FragmentActivity { 
private ViewPager mViewPager; 
private TabsAdapter mTabsAdapter; 
private final static String TAG = "21st Polling:"; 

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

mViewPager = new ViewPager(this); 
mViewPager.setId(R.id.pager); 
setContentView(mViewPager); 
final ActionBar bar = getActionBar(); 
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
bar.setDisplayShowTitleEnabled(false); 
bar.setDisplayShowHomeEnabled(false); 

mTabsAdapter = new TabsAdapter(this, mViewPager); 
mTabsAdapter.addTab(bar.newTab().setText(R.string.login), 
LoginFragment.class, null); 
mTabsAdapter.addTab(bar.newTab().setText(R.string.economics), 
EconFragment.class, null); 
mTabsAdapter.addTab(bar.newTab().setText(R.string.elections), 
ElectionsFragment.class, null); 
mTabsAdapter.addTab(bar.newTab().setText(R.string.politics), 
PoliticsFragment.class, null); 
mTabsAdapter.addTab(bar.newTab().setText(R.string.science), 
ScienceFragment.class, null); 
mTabsAdapter.addTab(bar.newTab().setText(R.string.finance), 
FinanceFragment.class, null); 
mTabsAdapter.addTab(bar.newTab().setText(R.string.religion), 
ReligionFragment.class, null); 
mTabsAdapter.addTab(bar.newTab().setText(R.string.military), 
MilitaryFragment.class, null); 
mTabsAdapter.addTab(bar.newTab().setText(R.string.international), 
InternationalFragment.class, null); 
} 

public static class TabsAdapter extends FragmentPagerAdapter 
    implements ActionBar.TabListener, ViewPager.OnPageChangeListener { 
     private final Context mContext; 
     private final ActionBar mActionBar; 
     private final ViewPager mViewPager; 
     private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 

     static final class TabInfo { 
      private final Class<?> clss; 
      private final Bundle args; 

      TabInfo(Class<?> _class, Bundle _args) { 
       clss = _class; 
       args = _args; 
      } 
     } 

     public TabsAdapter(FragmentActivity activity, ViewPager pager) { 
      super(activity.getSupportFragmentManager()); 
      mContext = activity; 
      mActionBar = activity.getActionBar(); 
      mViewPager = pager; 
      mViewPager.setAdapter(this); 
      mViewPager.setOnPageChangeListener(this); 
     } 

     public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { 
      TabInfo info = new TabInfo(clss, args); 
      tab.setTag(info); 
      tab.setTabListener(this); 
      mTabs.add(info); 
      mActionBar.addTab(tab); 
      notifyDataSetChanged(); 
     } 


     public int getCount() { 
      return mTabs.size(); 
     } 

     public Fragment getItem(int position) { 
      TabInfo info = mTabs.get(position); 
      return Fragment.instantiate(mContext, info.clss.getName(), info.args); 
     } 


     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
     } 


     public void onPageSelected(int position) { 
      mActionBar.setSelectedNavigationItem(position); 
     } 


     public void onPageScrollStateChanged(int state) { 
     } 


     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      mViewPager.setCurrentItem(tab.getPosition()); 
      Log.v(TAG, "clicked"); 
      Object tag = tab.getTag(); 
      for (int i=0; i<mTabs.size(); i++) { 
       if (mTabs.get(i) == tag) { 
        mViewPager.setCurrentItem(i); 
       } 
      } 
     } 

     public void onTabUnselected(Tab tab, FragmentTransaction ft) {} 

     public void onTabReselected(Tab tab, FragmentTransaction ft) {} 

     public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {} 

     @Override 
     public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {  
      Object tag = tab.getTag(); 
      for (int i=0; i<mTabs.size(); i++) { 
       if (mTabs.get(i) == tag) { 
        mViewPager.setCurrentItem(i); 
       } 
      } 
     } 

     public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {} 
    } 
0

如果您使用的是ActionBarSherlock,您最好使用操作栏选项卡,而不是TabHost。另外我相信ABS中有样本可以说明如何做到这一点。

1

swipey标签你指的实际上只是一个ViewPager为每个页面对应的标题标签。默认情况下,这并未包含在Android SDK中,但您可以使用Jake Wharton的ViewPagerIndicator为ViewPager中的每个选项卡添加标题。我相信ActionBarSherlock(也是由杰克沃顿创建的)也提供了相同的确切功能。

相关问题