Android两级导航菜单栏的实现--FragmentTabHost结合ViewPager与Android 开源项目PagerSlidingTabStrip
http://www.cnblogs.com/aademeng/articles/6119737.html
转载注:简单总结一下,外层Tab用TabHost,类层Tab用Viepager+FramentStatePagerAdapter解决方案。
本篇将使用PagerSlidingTabStrip 和ViewPager实现子Tab导航菜单栏的页面滑动。当然,你也可以直接把PagerSlidingTabStrip 和ViewPager放到项目中当做主Tab导航菜单栏使用,只要思路掌握了,就可以随心所欲的灵活运用了。
特别注明:本篇所使用的PagerSlidingTabStrip代码来自郭林。
先看一下效果图(二级Tab导航菜单栏可以实现滑动):
重写fragment_message.xml
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <com.example.testbase.customer.PagerSlidingTabStrip
- android:id="@+id/tabs"
- android:layout_width="match_parent"
- android:layout_height="40dp" />
- <android.support.v4.view.ViewPager
- android:id="@+id/pager"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@+id/tabs" />
- </LinearLayout>
重写 FragmentMessage
- public class FragmentMessage extends Fragment {
- private SubFragment1 subFragment1;
- private SubFragment2 subFragment2;
- private SubFragment3 subFragment3;
- /**
- * PagerSlidingTabStrip的实例
- */
- private PagerSlidingTabStrip tabs;
- /**
- * 获取当前屏幕的密度
- */
- private DisplayMetrics dm;
- @Override
- public void onCreate(Bundle savedInstanceState) {// 在前面执行
- super.onCreate(savedInstanceState);
- // 获取参数
- Bundle bundle = getArguments();
- if (null != bundle) {
- //
- }
- }
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- T.showShort(getActivity(), "FragmentMessage==onCreateView");
- View view = inflater.inflate(R.layout.fragment_message, null);
- initView(view);
- return view;
- }
- private void initView(View view) {
- dm = getResources().getDisplayMetrics();
- ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
- tabs = (PagerSlidingTabStrip) view.findViewById(R.id.tabs);
- pager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
- tabs.setViewPager(pager);
- setTabsValue();
- }
- /**
- * 对PagerSlidingTabStrip的各项属性进行赋值。
- */
- private void setTabsValue() {
- // 设置Tab是自动填充满屏幕的
- tabs.setShouldExpand(true);
- // 设置Tab的分割线是透明的
- tabs.setDividerColor(Color.TRANSPARENT);
- // tabs.setDividerColor(Color.BLACK);
- // 设置Tab底部线的高度
- tabs.setUnderlineHeight((int) TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_DIP, 1, dm));
- // 设置Tab Indicator的高度
- tabs.setIndicatorHeight((int) TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_DIP, 4, dm));// 4
- // 设置Tab标题文字的大小
- tabs.setTextSize((int) TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_SP, 16, dm)); // 16
- // 设置Tab Indicator的颜色
- tabs.setIndicatorColor(Color.parseColor("#45c01a"));// #45c01a
- // 设置选中Tab文字的颜色 (这是我自定义的一个方法)
- tabs.setSelectedTextColor(Color.parseColor("#45c01a"));// #45c01a
- // 取消点击Tab时的背景色
- tabs.setTabBackground(0);
- }
- // FragmentPagerAdapter FragmentStatePagerAdapter //不能用FragmentPagerAdapter
- public class MyPagerAdapter extends FragmentStatePagerAdapter {
- public MyPagerAdapter(FragmentManager fm) {
- super(fm);
- // TODO Auto-generated constructor stub
- }
- private final String[] titles = { "SubOne", "SubTwo", "SubThree" };
- @Override
- public CharSequence getPageTitle(int position) {
- return titles[position];
- }
- @Override
- public int getCount() {
- return titles.length;
- }
- @Override
- public Fragment getItem(int position) {
- switch (position) {
- case 0:
- if (null == subFragment1) {
- subFragment1 = new SubFragment1();
- }
- return subFragment1;
- case 1:
- if (null == subFragment2) {
- subFragment2 = new SubFragment2();
- }
- return subFragment2;
- case 2:
- if (null == subFragment3) {
- subFragment3 = new SubFragment3();
- }
- subFragment1 = new SubFragment1();
- return subFragment3;
- default:
- return null;
- }
- }
- }
- }
再添加 SubFragment1(这里只给出一个,其它类似)
- public class SubFragment1 extends Fragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- T.showShort(getActivity(), "SubFragment1==onCreateView");
- TextView tv = new TextView(getActivity());
- tv.setTextSize(25);
- tv.setBackgroundColor(Color.parseColor("#FFA07A"));
- tv.setText("SubFragment1");
- tv.setGravity(Gravity.CENTER);
- return tv;
- }
- }
感觉没什么可写了……当然,你会发现切换ViewPager的时候,它所管理的Fragment生命周期很有意思,具体需求具体解决,方案很多……
Demo下载地址:http://download.csdn.net/detail/yalinfendou/8543965
Android两级导航菜单栏的实现--FragmentTabHost结合ViewPager与Android 开源项目PagerSlidingTabStrip的更多相关文章
- jquery 实现两级导航菜单
主要用于运维系统, 对界面要求不高的场合. 深深感到自己页面设计能力弱爆了,只能借鉴一下了, 交互逻辑还可以胜任一点. 直接贴代码: 1. HTML 页面及 JS 交互, 注意引入 Jquery ...
- Android 两级菜单栏
这里来记录下,android 的两级菜单栏,就是顶部切换,和底部的切换.因为在这个上面整了太久的时间,所以特此记录下. 第一种: 先介绍一个网上别人写出来的效果吧,这个当时积分真的很高..CSDN30 ...
- Android两级嵌套ListView滑动问题的解决
Android下面两级嵌套ListView会出现滑动失效,解决方案,把两级Listview全换成NoScrollListView,代码如下: public class NoScrollListView ...
- 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在APP市场上,常常有一些充满新意的应用让我们眼前一亮,比方微信的面对面加好友,支付宝的声波支付等等,都是通 ...
- Android之官方导航栏之Toolbar(Toolbar+DrawerLayout+ViewPager+PagerSlidingTabStrip)
通过前几篇文章,我们对Android的导航栏有了一定的了解认识,本次文章将对Toolbar进行综合应用,主要结合DrawerLayout.ViewPager.PagerSlidingTabStrip一 ...
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷 ...
- Android之圆点导航的两个案例(ViewPager)
案例一效果: 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" ...
- Android——spinner控件实现读取xml资源,省、市两级互动
(1)首先在res文件夹下面的values中创建一个省市arrays.xml文件夹,如下 <?xml version="1.0" encoding="utf-8&q ...
- Android开发 侧边滑动菜单栏SlidingMenu结合Fragment
SlidingMenu是一个开源项目, https://github.com/jfeinstein10/SlidingMenu .功能是创建侧边滑动菜单栏,效果类似人人Android客户端,可点击按钮 ...
随机推荐
- JAVA获取计算机的IP、名称、操作系统等信息
[java] view plaincopyprint? import java.io.BufferedReader; import java.io.InputStream; import java.i ...
- [GitHub]第六讲:开源项目贡献流程
Github 是目前世界上最大的开源项目的托管交流平台.贡献开源项目的流程也是 Github 全力支持的,也一样是遵循 Github Flow,虽然跟前面团队合作流程会有一点差别.在团队内部,大家都是 ...
- iOS中 图文混排/自定义图文混排 作者:韩俊强
指示根视图:(准备几张图片,把label加载在window上) CustomLable *label = [[CustomLable alloc]initWithFrame:CGRectMake(0, ...
- Dynamics CRM2013 去除界面顶部黄色的CRM For Outlook条框
Dynamics CRM2013中每次打开系统页面上方都会有个黄条看着很是烦人,效果如下图 庆幸的是系统提供了关闭的开关,设置-管理-系统设置,把"设置CRM For Outlook消息是否 ...
- Linux下配置Tomcat
***安装*** 安装JDK chmod a+x jdk-1_5_0_06-linux-i586-rpm.bin ./jdk-1_5_0_06-linux-i586-rpm.bin 敲几次空格就O ...
- Unable to handle 'index' format version '2', please update rosdistro的解决办法
之前安装的ROS是Fuerte版本的,好久没有更新,不知不觉又出来了好几个新的版本,今天删除了Fuerte,计划安装Hydro版本的尝尝新,按照官网的安装流程,很快就可以把新版本安装上去了,但是在&q ...
- 分布式进阶(十) linux命令行下载文件以及常用工具:wget、Prozilla、MyGet、Linuxdown、Curl、Axel
linux命令行下载文件以及常用工具:wget.Prozilla.MyGet.Linuxdown.Curl.Axel 本文介绍常用的几种命令行式的下载工具:wget.Prozilla.MyGet.Li ...
- python3爬虫 - cookie登录实战
http://blog.csdn.net/pipisorry/article/details/47948065 实战1:使用cookie登录哈工大ACM网站 获取网站登录地址 http://acm.h ...
- AngularJS进阶(三十三)书海拾贝之简介AngularJS中使用factory和service的方法
简介AngularJS中使用factory和service的方法 AngularJS支持使用服务的体系结构"关注点分离"的概念.服务是JavaScript函数,并负责只做一个特定的 ...
- 【单片机】基于有方GPRS的智能电梯控制系统
前一篇文章<时钟及温度的显示>中所介绍的作品,是作为一个单片机新手在暑假学了一个月的单片机之后,做的第一个综合性作品,涵盖了二极管.蜂鸣器.数码管.液晶屏.按键.时钟芯片.温度传感器的控制 ...