ActionBarSherlock与Fragment的结合使用非常广泛,再加上Viewpager的滑动效果,可以实现很多很炫的效果。
MainActivity.java:
public class MainActivity extends SherlockFragmentActivity implements TabListener,OnPageChangeListener{
/*定义顶部Tab的title*/
private String[] mTabTitles;
/*ViewPager对象的引用*/
private ViewPager mViewpager;
/*装载Fragment的容器,每一个界面都是一个Fragment*/
private List<Fragment> mFragment;
/*ActionBar对象的引用*/
private ActionBar mActionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*从资源文件中获取Tab的体title*/
mTabTitles = this.getResources().getStringArray(R.array.tab_title);
/*创建一个Fragment集合*/
mFragment = new ArrayList<Fragment>();
/*获取Viewpager对象*/
mViewpager = (ViewPager) this.findViewById(R.id.viewPager);
/*设置Adapter*/
mViewpager.setAdapter(new TabPagerAdapter(this.getSupportFragmentManager(), mFragment));
/*设置viewPager切换的监听*/
mViewpager.setOnPageChangeListener(this);
/*获取ActionBar*/
mActionBar = this.getSupportActionBar();
/*设置不隐藏title*/
mActionBar.setDisplayShowTitleEnabled(false);
/*设置不隐藏Home Logo*/
mActionBar.setDisplayHomeAsUpEnabled(false);
/*设置ActionBar的导航模式为Tab*/
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
/*为ActionBar添加Tab并设置TabListener*/
for (int i=0; i<mTabTitles.length; i++){
ActionBar.Tab tab = mActionBar.newTab();
tab.setText(mTabTitles[i]);
tab.setTabListener(this);
mActionBar.addTab(tab, i);
}
/*将Fragment加入到List中,并将Tab的title传递给Fragment*/
for (int i=0; i<mTabTitles.length; i++){
Fragment fragment = new ItemFreagment();
Bundle args = new Bundle();
args.putString("arg", mTabTitles[i]);
fragment.setArguments(args);
mFragment.add(fragment);
}
}
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) {
getSupportMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int arg0) {
/*滑动ViewPager的时候设置相对应的ActionBar Tab被选中*/
mActionBar.setSelectedNavigationItem(arg0);
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
/*设置当前选中*/
mViewpager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
}
适配器TabPagerAdapter.java:
public class TabPagerAdapter extends FragmentStatePagerAdapter {
/*定义一个Fragment的集合*/
private List<Fragment> list;
/*构造函数*/
public TabPagerAdapter(FragmentManager fm,List<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int arg0) {
return list.get(arg0);
}
@Override
public int getCount() {
return list.size();
}
}
ItemFragment.java:
public class ItemFreagment extends SherlockFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView =inflater.inflate(R.layout.fragment_item, container, false);
TextView mTextView = (TextView) rootView.findViewById(R.id.textview);
/*获取Activity传过来的参数*/
Bundle mBundle = getArguments();
String title = mBundle.getString("arg");
mTextView.setText(title);
return rootView;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
}
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
}
}
activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>
fragment_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@android:color/background_dark"
android:textSize="18sp"
android:gravity="center"/>
</RelativeLayout>
values/styles.xml:
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
<style name="Theme.ActionBarTab" parent="@style/Theme.Sherlock">
<!-- 去除ActionBar的Divider分割线
<item name="actionBarDivider">@null</item>-->
<!-- 设置ActionBar Tab的高度 -->
<item name="actionBarSize">45dp</item>
<!-- 设置ActionBar Tab字体的样式 -->
<item name="actionBarTabTextStyle">@style/Widget.Sherlock.ActionBar.TabText</item>
<!-- 设置ActionBar Tab的样式,例如下面的红色指引,Tab之间的间隙等等 -->
<item name="actionBarTabStyle">@style/Widget.Sherlock.ActionBar.TabView</item>
<!-- 设置ActionBar的样式,这里简单的设置了ActionBar的背景 -->
<item name="actionBarStyle">@style/Widget.Slider.ActionBar</item>
</style>
<style name="Widget.Slider.ActionBar" parent="@style/Widget.Sherlock.ActionBar">
<item name="backgroundStacked">@drawable/base_action_bar_bg</item>
</style>
<style name="Widget.Sherlock.ActionBar.TabText" parent="android:Widget.Holo.ActionBar.TabText">
<item name="android:textColor">@drawable/selector_tabtext</item>
<item name="android:textSize">15sp</item>
</style>
<style name="Widget.Sherlock.ActionBar.TabView" parent="Widget">
<item name="android:background">@drawable/tab_indicator</item>
<item name="android:paddingLeft">8dip</item>
<item name="android:paddingRight">8dip</item>
</style>
</resources>
另外不要忘记修改主题样式!
demo效果展示:
demo下载:http://download.csdn.net/detail/lzm1340458776/7320867