主要思想:顶部标题栏top.xml,中间ViewPager(4个Fragment),底部导航

top.xml和bottom.xml在我之前的两个随笔里有,此处不再赘述。

activity_main.xml具体实现:

<LinearLayout 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:orientation="vertical" ><include layout="@layout/top" /><android.support.v4.view.ViewPager
android:id="@+id/id_viewpager"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" >
</android.support.v4.view.ViewPager><include layout="@layout/bottom" /></LinearLayout>

不同的是MainActivity.java文件的实现。

MainActivity.java具体实现:

package com.imooc.tab03;import java.util.ArrayList;
import java.util.List;import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.LinearLayout;public class MainActivity extends FragmentActivity implements OnClickListener
{
private ViewPager mViewPager;
private FragmentPagerAdapter mAdapter;
private List<Fragment> mFragments;private LinearLayout mTabWeixin;
private LinearLayout mTabFrd;
private LinearLayout mTabAddress;
private LinearLayout mTabSettings;private ImageButton mImgWeixin;
private ImageButton mImgFrd;
private ImageButton mImgAddress;
private ImageButton mImgSettings;@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);initView();
initEvent();setSelect(1);
}private void initEvent()
{
mTabWeixin.setOnClickListener(this);
mTabFrd.setOnClickListener(this);
mTabAddress.setOnClickListener(this);
mTabSettings.setOnClickListener(this);
}private void initView()
{
mViewPager = (ViewPager) findViewById(R.id.id_viewpager);mTabWeixin = (LinearLayout) findViewById(R.id.id_tab_weixin);
mTabFrd = (LinearLayout) findViewById(R.id.id_tab_frd);
mTabAddress = (LinearLayout) findViewById(R.id.id_tab_address);
mTabSettings = (LinearLayout) findViewById(R.id.id_tab_settings);mImgWeixin = (ImageButton) findViewById(R.id.id_tab_weixin_img);
mImgFrd = (ImageButton) findViewById(R.id.id_tab_frd_img);
mImgAddress = (ImageButton) findViewById(R.id.id_tab_address_img);
mImgSettings = (ImageButton) findViewById(R.id.id_tab_settings_img);mFragments = new ArrayList<Fragment>();
Fragment mTab01 = new WeixinFragment();
Fragment mTab02 = new FrdFragment();
Fragment mTab03 = new AddressFragment();
Fragment mTab04 = new SettingFragment();
mFragments.add(mTab01);
mFragments.add(mTab02);
mFragments.add(mTab03);
mFragments.add(mTab04);mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())
{@Override
public int getCount()
{
return mFragments.size();
}@Override
public Fragment getItem(int arg0)
{
return mFragments.get(arg0);
}
};
mViewPager.setAdapter(mAdapter);mViewPager.setOnPageChangeListener(new OnPageChangeListener()
{@Override
public void onPageSelected(int arg0)
{
int currentItem = mViewPager.getCurrentItem();
setTab(currentItem);
}@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{
// TODO Auto-generated method stub

}@Override
public void onPageScrollStateChanged(int arg0)
{
// TODO Auto-generated method stub

}
});
}@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.id_tab_weixin:
setSelect(0);
break;
case R.id.id_tab_frd:
setSelect(1);
break;
case R.id.id_tab_address:
setSelect(2);
break;
case R.id.id_tab_settings:
setSelect(3);
break;default:
break;
}
}private void setSelect(int i)
{
setTab(i);
mViewPager.setCurrentItem(i);
}private void setTab(int i)
{
resetImgs();
// 设置图片为亮色
// 切换内容区域
switch (i)
{
case 0:
mImgWeixin.setImageResource(R.drawable.tab_weixin_pressed);
break;
case 1:
mImgFrd.setImageResource(R.drawable.tab_find_frd_pressed);
break;
case 2:
mImgAddress.setImageResource(R.drawable.tab_address_pressed);
break;
case 3:
mImgSettings.setImageResource(R.drawable.tab_settings_pressed);
break;
}
}/**
* 切换图片至暗色
*/
private void resetImgs()
{
mImgWeixin.setImageResource(R.drawable.tab_weixin_normal);
mImgFrd.setImageResource(R.drawable.tab_find_frd_normal);
mImgAddress.setImageResource(R.drawable.tab_address_normal);
mImgSettings.setImageResource(R.drawable.tab_settings_normal);
}}

转载于:https://www.cnblogs.com/rainmer/p/4255064.html

ViewPager+Fragment实现支持左右滑动的Tab相关推荐

  1. TabHost+ViewPager+Fragment实现页面的滑动,android开发工具deve

    <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width=&qu ...

  2. 处女男学Android(十一)---Gallery、ViewPager和ViewPager+Fragment实现的Tab导航

    一.前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/42087915 有阵子没更新博客了,主要是最近公司接了个P2P的金融借贷项 ...

  3. 利用ViewPager+Fragment+actionbar实现可左右滑动的Action Tab

    1. ViewPager要点: ViewPager 是一个布局管理类(layout manager),用于提供页面的左右滑动功能,类似于ListView,也有为ViewPager提供     数据(F ...

  4. android 可折叠标题栏,ViewPager + Fragment + 折叠式标题栏异常

    我模仿别人的知乎日报,新闻列表页没问题,内容明细页(NewsDetail)用的是ViewPager+Fragment.可以左右滑动看左右的新闻的. 我的项目地址是链接描述 但是我在做顶部可折叠式标题栏 ...

  5. ViewPager+Fragment实现TabHost,Fragment动态添加、删除,Tab选项卡跟随滑动

    效果图: 代码功能: (1)用ViewPager+Fragment实现TabHost,ViewPager的每一个Page均是Fragment.ViewPager中的Fragment可以动态添加.删除. ...

  6. Android实战简易教程-第三十四枪(基于ViewPager和FragmentPagerAdapter实现滑动通用Tab)...

    上一段时间写过一篇文章<基于ViewPager实现微信页面切换效果> 里面实现了相似微信Tab的页面.可是这样的实现方法有个问题.就是以后全部的代码逻辑都必须在MainActivity中实 ...

  7. 小牛的安卓笔记-----底部导航栏的实现以及用TabLayout+ViewPager+Fragment实现页面滑动切换

    昨夜西风凋碧树,独上高楼,望尽天涯路. 今天难得有时间,准备写一写我们在APP中经常用到的页面形式,废话不多说,直接一张图看看页面效果你就知道为啥是常用的页面形式.先看看逻辑和最后的效果是怎么样的: ...

  8. 仿百度壁纸客户端(一)——主框架搭建,自定义Tab+ViewPager+Fragment

    仿百度壁纸客户端(一)--主框架搭建,自定义Tab+ViewPager+Fragment 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment ...

  9. 安卓开发之使用viewpager+fragment实现滚动tab页

    闲着.用viewpager+fragment实现了个滚动tab..轻拍,以后会陆续发先小东西出来..爱分享,才快乐.demo见附件.. Java代码   package com.example.dem ...

最新文章

  1. 如何才能做好绩效管理?
  2. VTK:Filtering之Delaunay2D
  3. 因为银行原因出现房贷逾期,怎么修复征信?
  4. 鸿蒙系统暗黑2,暗黑破坏神2为什么被称为神作!看看装备强化系统就知道有多完美...
  5. ubuntu 缺少php安装包,ubuntu 16.04 lts安装php环境和composer依赖包管理
  6. linux-文件的删除与创建
  7. mysql命令行导入dmp文件,oracle的备份文件(dmp)导入mysql数据库方法
  8. VirtualBox无法启动虚拟机的解决办法
  9. 安卓flash插件_安卓手机如何打开.swf文件 如何用手机播放swf文件
  10. js根据身份证号码计算年龄的方法
  11. 新冠疫情分析(疫情数据爬取+数据分析+网页排版展示)
  12. NTKO 文件在线编辑并保存 目前平台板plus支持 word excel ppt
  13. 【免费开放源码】审批类小程序项目实战(预约审批端)
  14. 聊天室程序python_Python聊天室程序(基础版)_python
  15. dataframe 设置空值_数据清洗--DataFrame中的空值处理方法
  16. 信号与系统--信号以及系统的介绍(一)
  17. linux 25端口漏洞,Linux通过栈溢出进行提权实战(dpwwn03)
  18. JAVA多线程技术-线程的生命周期
  19. eclipse java3d_Using Xj3D in your Java Application
  20. 广州住房公积金管理中心综合业务管理系统容灾项目(GZIT2010-ZB0103)招标公告...

热门文章

  1. [导入]七大千年数学难题
  2. C/C++ 编程中多国语言处理
  3. ubuntu12.04循环登录,无法进桌面的问题。
  4. L1-060 心理阴影面积 (5 分)-PAT 团体程序设计天梯赛 GPLT
  5. [Python] L1-031. 到底是不是太胖了-PAT团体程序设计天梯赛GPLT
  6. 蓝桥杯 ADV-69 算法提高 质因数
  7. 1114. Family Property (25)-PAT甲级真题(并查集)
  8. oracle自定义函数返回一个表,oracle 自定义函数 返回一个表类型
  9. java获取两个字符串日期之间间隔的天数
  10. 使用MediaCodec硬解码h.265视频及音频进行播放