编辑:
我想把这个设计当作一个挑战,看看结果如何:
正如我在评论中建议的那样,我使用了 PagerSlidingTabStrip和ViewPager
.
我没有包含ActionBarSherlock
,但如果需要,这将很容易修改:MainActivity
将需要从 扩展SherlockFragmentActivity
,并将主题@style/Theme.Sherlock.Light
添加到清单文件中,仅此而已。
(只是为了确保您明白这一点,PagerSlidingTabStrip
是在底部创建标签的人)
以下是我将 PagerSlidingTabStrip 和 ViewPager 与 SlidingMenu 集成的步骤:
1 -将 SlidingMenu库导入 Eclipse 工作区
2 -将 PagerSlidingTabStrip库导入 Eclipse 工作区
3 - 将 Android 支持库添加到您的项目中(并将相同的 .jar 复制到 SlidingMenu 和 PagerSlidingTabString 库中,否则 eclipse 可能会抱怨)
4 - 一个最小示例MainActivity
:
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SlidingMenu menu = new SlidingMenu(this);
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
menu.setBehindOffset(50);
menu.setFadeDegree(0.35f);
menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
menu.setMenu(R.layout.left_menu);
ViewPager pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager()));
PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
tabs.setViewPager(pager);
}
}
5 - 滑动菜单的布局,R.layout.left_menu
:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/left_menu"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#CCC"
android:orientation="vertical" xmlns:app="http://schemas.android.com/apk/res/org.grec">
<com.astuetz.viewpager.extensions.PagerSlidingTabStrip
android:id="@+id/tabs"
app:shouldExpand="true"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_height="48dip" />
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/tabs" />
</RelativeLayout>
6 - ViewPagerAdapter
:
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private final int PAGES = 3;
private String[] titles={"Tab 1", "Tab 2", "Tab 3"};
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new TabFragment1();
case 1:
return new TabFragment2();
case 2:
return new TabFragment3();
default:
throw new IllegalArgumentException("The item position should be less or equal to:" + PAGES);
}
}
@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}
@Override
public int getCount() {
return PAGES;
}
}
7 - 还有一个片段示例,TabFragment1.java
(其他 2 个类似):
public class TabFragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_tab_1, container, false);
}
}
8 - 片段的布局R.layout.fragment_tab_1
非常简单,它包含一个TextView
,所以我不会在这里包含它。
我希望这个例子能解决你的问题,并能帮助你走上正确的道路。
github 上的完整源代码:https ://github.com/vgrec/SlidingMenuWithViewpager