http://www.cnblogs.com/aademeng/articles/6119737.html

转载注:简单总结一下,外层Tab用TabHost,类层Tab用Viepager+FramentStatePagerAdapter解决方案。

本篇将使用PagerSlidingTabStrip 和ViewPager实现子Tab导航菜单栏的页面滑动。当然,你也可以直接把PagerSlidingTabStrip 和ViewPager放到项目中当做主Tab导航菜单栏使用,只要思路掌握了,就可以随心所欲的灵活运用了。

特别注明:本篇所使用的PagerSlidingTabStrip代码来自郭林

先看一下效果图(二级Tab导航菜单栏可以实现滑动):

 

重写fragment_message.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout 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. <com.example.testbase.customer.PagerSlidingTabStrip
  7. android:id="@+id/tabs"
  8. android:layout_width="match_parent"
  9. android:layout_height="40dp" />
  10. <android.support.v4.view.ViewPager
  11. android:id="@+id/pager"
  12. android:layout_width="match_parent"
  13. android:layout_height="wrap_content"
  14. android:layout_below="@+id/tabs" />
  15. </LinearLayout>

重写 FragmentMessage

  1. public class FragmentMessage extends Fragment {
  2. private SubFragment1 subFragment1;
  3. private SubFragment2 subFragment2;
  4. private SubFragment3 subFragment3;
  5. /**
  6. * PagerSlidingTabStrip的实例
  7. */
  8. private PagerSlidingTabStrip tabs;
  9. /**
  10. * 获取当前屏幕的密度
  11. */
  12. private DisplayMetrics dm;
  13. @Override
  14. public void onCreate(Bundle savedInstanceState) {// 在前面执行
  15. super.onCreate(savedInstanceState);
  16. // 获取参数
  17. Bundle bundle = getArguments();
  18. if (null != bundle) {
  19. //
  20. }
  21. }
  22. @Override
  23. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  24. Bundle savedInstanceState) {
  25. T.showShort(getActivity(), "FragmentMessage==onCreateView");
  26. View view = inflater.inflate(R.layout.fragment_message, null);
  27. initView(view);
  28. return view;
  29. }
  30. private void initView(View view) {
  31. dm = getResources().getDisplayMetrics();
  32. ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
  33. tabs = (PagerSlidingTabStrip) view.findViewById(R.id.tabs);
  34. pager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
  35. tabs.setViewPager(pager);
  36. setTabsValue();
  37. }
  38. /**
  39. * 对PagerSlidingTabStrip的各项属性进行赋值。
  40. */
  41. private void setTabsValue() {
  42. // 设置Tab是自动填充满屏幕的
  43. tabs.setShouldExpand(true);
  44. // 设置Tab的分割线是透明的
  45. tabs.setDividerColor(Color.TRANSPARENT);
  46. // tabs.setDividerColor(Color.BLACK);
  47. // 设置Tab底部线的高度
  48. tabs.setUnderlineHeight((int) TypedValue.applyDimension(
  49. TypedValue.COMPLEX_UNIT_DIP, 1, dm));
  50. // 设置Tab Indicator的高度
  51. tabs.setIndicatorHeight((int) TypedValue.applyDimension(
  52. TypedValue.COMPLEX_UNIT_DIP, 4, dm));// 4
  53. // 设置Tab标题文字的大小
  54. tabs.setTextSize((int) TypedValue.applyDimension(
  55. TypedValue.COMPLEX_UNIT_SP, 16, dm)); // 16
  56. // 设置Tab Indicator的颜色
  57. tabs.setIndicatorColor(Color.parseColor("#45c01a"));// #45c01a
  58. // 设置选中Tab文字的颜色 (这是我自定义的一个方法)
  59. tabs.setSelectedTextColor(Color.parseColor("#45c01a"));// #45c01a
  60. // 取消点击Tab时的背景色
  61. tabs.setTabBackground(0);
  62. }
  63. // FragmentPagerAdapter FragmentStatePagerAdapter //不能用FragmentPagerAdapter
  64. public class MyPagerAdapter extends FragmentStatePagerAdapter {
  65. public MyPagerAdapter(FragmentManager fm) {
  66. super(fm);
  67. // TODO Auto-generated constructor stub
  68. }
  69. private final String[] titles = { "SubOne", "SubTwo", "SubThree" };
  70. @Override
  71. public CharSequence getPageTitle(int position) {
  72. return titles[position];
  73. }
  74. @Override
  75. public int getCount() {
  76. return titles.length;
  77. }
  78. @Override
  79. public Fragment getItem(int position) {
  80. switch (position) {
  81. case 0:
  82. if (null == subFragment1) {
  83. subFragment1 = new SubFragment1();
  84. }
  85. return subFragment1;
  86. case 1:
  87. if (null == subFragment2) {
  88. subFragment2 = new SubFragment2();
  89. }
  90. return subFragment2;
  91. case 2:
  92. if (null == subFragment3) {
  93. subFragment3 = new SubFragment3();
  94. }
  95. subFragment1 = new SubFragment1();
  96. return subFragment3;
  97. default:
  98. return null;
  99. }
  100. }
  101. }
  102. }

再添加 SubFragment1(这里只给出一个,其它类似)

  1. public class SubFragment1 extends Fragment {
  2. @Override
  3. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  4. Bundle savedInstanceState) {
  5. T.showShort(getActivity(), "SubFragment1==onCreateView");
  6. TextView tv = new TextView(getActivity());
  7. tv.setTextSize(25);
  8. tv.setBackgroundColor(Color.parseColor("#FFA07A"));
  9. tv.setText("SubFragment1");
  10. tv.setGravity(Gravity.CENTER);
  11. return tv;
  12. }
  13. }

感觉没什么可写了……当然,你会发现切换ViewPager的时候,它所管理的Fragment生命周期很有意思,具体需求具体解决,方案很多……

Demo下载地址:http://download.csdn.net/detail/yalinfendou/8543965

Android两级导航菜单栏的实现--FragmentTabHost结合ViewPager与Android 开源项目PagerSlidingTabStrip的更多相关文章

  1. jquery 实现两级导航菜单

    主要用于运维系统, 对界面要求不高的场合.  深深感到自己页面设计能力弱爆了,只能借鉴一下了, 交互逻辑还可以胜任一点. 直接贴代码: 1.  HTML 页面及 JS 交互, 注意引入 Jquery ...

  2. Android 两级菜单栏

    这里来记录下,android 的两级菜单栏,就是顶部切换,和底部的切换.因为在这个上面整了太久的时间,所以特此记录下. 第一种: 先介绍一个网上别人写出来的效果吧,这个当时积分真的很高..CSDN30 ...

  3. Android两级嵌套ListView滑动问题的解决

    Android下面两级嵌套ListView会出现滑动失效,解决方案,把两级Listview全换成NoScrollListView,代码如下: public class NoScrollListView ...

  4. 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在APP市场上,常常有一些充满新意的应用让我们眼前一亮,比方微信的面对面加好友,支付宝的声波支付等等,都是通 ...

  5. Android之官方导航栏之Toolbar(Toolbar+DrawerLayout+ViewPager+PagerSlidingTabStrip)

    通过前几篇文章,我们对Android的导航栏有了一定的了解认识,本次文章将对Toolbar进行综合应用,主要结合DrawerLayout.ViewPager.PagerSlidingTabStrip一 ...

  6. Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向

    很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷 ...

  7. Android之圆点导航的两个案例(ViewPager)

    案例一效果: 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...

  8. Android——spinner控件实现读取xml资源,省、市两级互动

    (1)首先在res文件夹下面的values中创建一个省市arrays.xml文件夹,如下 <?xml version="1.0" encoding="utf-8&q ...

  9. Android开发 侧边滑动菜单栏SlidingMenu结合Fragment

    SlidingMenu是一个开源项目, https://github.com/jfeinstein10/SlidingMenu .功能是创建侧边滑动菜单栏,效果类似人人Android客户端,可点击按钮 ...

随机推荐

  1. Struts2 源码剖析 控制部分-----1

    这部分着重分析从我们发出一个uri请求,一直到代码运行到我们自己写的action类为止,struts的控制部分的代码(还有数据流部分,我们后面再分析) 已经用了快1年多的struts2了,一直认为对开 ...

  2. Linux IPC实践(7) --Posix消息队列

    1. 创建/获取一个消息队列 #include <fcntl.h> /* For O_* constants */ #include <sys/stat.h> /* For m ...

  3. Android官方网站

     http://wear.techbrood.com/sdk/installing/index.html?pkg=tools

  4. css3动画从入门到精通

    什么是css3动画? 通过 CSS3,我们能够创建动画,这可以在许多网页中取代动画图片.Flash 动画以及 JavaScript. CSS3带来了圆角,半透明,阴影,渐变,多背景图等新的特征,轻松实 ...

  5. 发布Ext JS 5.1 beta版本

    原文:Announcing Ext JS 5.1 Beta 概述 我们很高兴的宣布,Ext JS 5.1 beta发布了.自从Ext JS 5.0.1,我们一直在努力添加一些令人兴奋的和一些在Senc ...

  6. Linux Shell 命令--awk

    说明: awk被设计用于数据流,能够对列和行进行操作.而sed更多的是匹配,进行替换和删除.awk有很多内建的功能,比如数组,函数等.灵活性是awk的最大优势.  awk的结构}{i++}END{pr ...

  7. jQuery插件AjaxFileUpload文件上传实现Javascript多文件上传功能

     Ajax file upload plugin是一个功能强大的文件上传jQuery插件,可自定义链接.或其它元素庖代传统的file表单上传结果,可实现Ajax动态提示文件上传 过程,同时支撑多文 ...

  8. 100个iOS开发面试题汇总

    100个iOS开发面试题汇总 关于iOS开发面试,不管对于招聘和应聘来说,面试都是很重要的一个环节,特别对于开发者来说,面试中的技术问题环节不仅是企业对应聘者技能和积累的考察,也是一个开发者自我检验的 ...

  9. 基于VB中WINSOCK控件的网上象棋系统的实现

    本文发表在<微型机与应用>杂志2001年第3期. 基于VB中WINSOCK控件的网上象棋系统的实现 马根峰1   ,  孙艳2  , 王平1 (1.重庆邮电学院自动化学院,重庆,40006 ...

  10. 【面试笔试算法】牛客网一站通Offer编程题2016.4.19

    牛客网一站通offer (一)字符串变形 1. 题目: 对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形.首先这个字符串中包含着一些空格,就像"Hello Wor ...