使用ViewPager + Fragment实现微信底部Tab效果
下面是最常用的Tab布局,最终实现效果
MainActivity的主文件代码:
public class MainActivity extends FragmentActivity implements View.OnClickListener {//声明ViewPagerprivate ViewPager mViewPager;//适配器private FragmentPagerAdapter mAdapter;//装载Fragment的集合private List<Fragment> mFragments;//四个Tab对应的布局private LinearLayout mTabWeixin;private LinearLayout mTabFrd;private LinearLayout mTabAddress;private LinearLayout mTabSetting;//四个Tab对应的ImageButtonprivate ImageButton mImgWeixin;private ImageButton mImgFrd;private ImageButton mImgAddress;private ImageButton mImgSetting;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_main);initViews();//初始化控件initEvents();//初始化事件initDatas();//初始化数据 }private void initDatas() {mFragments = new ArrayList<>();//将四个Fragment加入集合中mFragments.add(new WeixinFragment());mFragments.add(new PengYouFragment());mFragments.add(new TongXunFragment());mFragments.add(new SheZhiFragment());//初始化适配器mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {@Overridepublic Fragment getItem(int position) {//从集合中获取对应位置的Fragmentreturn mFragments.get(position);}@Overridepublic int getCount() {//获取集合中Fragment的总数return mFragments.size();}};//不要忘记设置ViewPager的适配器 mViewPager.setAdapter(mAdapter);//设置ViewPager的切换监听mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Override//页面滚动事件public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}//页面选中事件 @Overridepublic void onPageSelected(int position) {//设置position对应的集合中的Fragment mViewPager.setCurrentItem(position);resetImgs();selectTab(position);}@Override//页面滚动状态改变事件public void onPageScrollStateChanged(int state) {}});}private void initEvents() {//设置四个Tab的点击事件mTabWeixin.setOnClickListener(this);mTabFrd.setOnClickListener(this);mTabAddress.setOnClickListener(this);mTabSetting.setOnClickListener(this);}//初始化控件private void initViews() {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);mTabSetting = (LinearLayout) findViewById(R.id.id_tab_setting);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);mImgSetting = (ImageButton) findViewById(R.id.id_tab_setting_img);}@Overridepublic void onClick(View v) {//先将四个ImageButton置为灰色 resetImgs();//根据点击的Tab切换不同的页面及设置对应的ImageButton为绿色switch (v.getId()) {case R.id.id_tab_weixin:selectTab(0);break;case R.id.id_tab_frd:selectTab(1);break;case R.id.id_tab_address:selectTab(2);break;case R.id.id_tab_setting:selectTab(3);break;}}private void selectTab(int i) {//根据点击的Tab设置对应的ImageButton为绿色switch (i) {case 0:mImgWeixin.setImageResource(R.mipmap.tab_weixin_pressed);break;case 1:mImgFrd.setImageResource(R.mipmap.tab_find_frd_pressed);break;case 2:mImgAddress.setImageResource(R.mipmap.tab_address_pressed);break;case 3:mImgSetting.setImageResource(R.mipmap.tab_settings_pressed);break;}//设置当前点击的Tab所对应的页面 mViewPager.setCurrentItem(i);}//将四个ImageButton设置为灰色private void resetImgs() {mImgWeixin.setImageResource(R.mipmap.tab_weixin_normal);mImgFrd.setImageResource(R.mipmap.tab_find_frd_normal);mImgAddress.setImageResource(R.mipmap.tab_address_normal);mImgSetting.setImageResource(R.mipmap.tab_settings_normal);} }
“微信”“朋友” “通讯录” “设置”所对应的Fragment
![](/assets/blank.gif)
![](/assets/blank.gif)
public class WeixinFragment extends Fragment {@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.weixin_main, container, false);return view;} }
WeixinFragment.java
![](/assets/blank.gif)
![](/assets/blank.gif)
public class PengYouFragment extends Fragment {@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.pengyou_main, container, false);return view;} }
PengYouFragment.java
![](/assets/blank.gif)
![](/assets/blank.gif)
public class TongXunFragment extends Fragment {@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.tongxun_main, container, false);return view;} }
TongXunFragment.java
![](/assets/blank.gif)
![](/assets/blank.gif)
public class SheZhiFragment extends Fragment {@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.shezhi_main, container, false);return view;} }
SheZhiFragment.java
顶部布局文件:
![](/assets/blank.gif)
![](/assets/blank.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:background="@android:drawable/title_bar"android:gravity="center"android:layout_width="match_parent"android:layout_height="45dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="微信"android:textColor="#ffffff"android:textSize="20sp"android:textStyle="bold"/></LinearLayout>
top_main.xml
底部布局文件:
![](/assets/blank.gif)
![](/assets/blank.gif)
<?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="55dp"android:gravity="center"android:background="#FFF"android:orientation="horizontal"><LinearLayoutandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:id="@+id/id_tab_weixin"android:gravity="center"android:orientation="vertical"><ImageButtonandroid:id="@+id/id_tab_weixin_img"android:clickable="false"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/tab_weixin_pressed"android:background="#00000000"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#333"android:text="微信"/></LinearLayout><LinearLayoutandroid:id="@+id/id_tab_frd"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:orientation="vertical"><ImageButtonandroid:id="@+id/id_tab_frd_img"android:clickable="false"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/tab_find_frd_normal"android:background="#00000000"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#333"android:text="朋友"/></LinearLayout><LinearLayoutandroid:id="@+id/id_tab_address"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:orientation="vertical"><ImageButtonandroid:id="@+id/id_tab_address_img"android:clickable="false"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/tab_address_normal"android:background="#00000000"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#333"android:text="通讯录"/></LinearLayout><LinearLayoutandroid:id="@+id/id_tab_setting"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:orientation="vertical"><ImageButtonandroid:id="@+id/id_tab_setting_img"android:clickable="false"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/tab_settings_normal"android:background="#00000000"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="#333"android:text="设置"/></LinearLayout></LinearLayout>
bottom_main.xml
四个Tab相应的布局:
![](/assets/blank.gif)
![](/assets/blank.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:textSize="30sp"android:text="我是微信"/> </LinearLayout>
weixin_main.xml
![](/assets/blank.gif)
![](/assets/blank.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:textSize="30sp"android:text="我是朋友"/> </LinearLayout>
pengyou_main.xml
![](/assets/blank.gif)
![](/assets/blank.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:textSize="30sp"android:text="我是通讯"/> </LinearLayout>
tongxun_main.xml
![](/assets/blank.gif)
![](/assets/blank.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:textSize="30sp"android:text="我是设置"/> </LinearLayout>
shezhi_main.xml
主布局文件:
![](/assets/blank.gif)
![](/assets/blank.gif)
<?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><include layout="@layout/top"/><android.support.v4.view.ViewPagerandroid:id="@+id/id_viewpager"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1"></android.support.v4.view.ViewPager><include layout="@layout/bottom"/> </LinearLayout>
activity_main.xml
以上就是效果的完整代码,直接复制就可以使用,注意把图片换成自己的图片!!!
转载于:https://www.cnblogs.com/it135/p/10355966.html
使用ViewPager + Fragment实现微信底部Tab效果相关推荐
- BottomNavigationView+ViewPager+Fragment仿微信底部导航栏
目标: 要实现的界面如下: 此时,我们需要采用BottomNavigationView+ViewPager+Fragment,一点点的说起.首先要在app/build.gradle里添加: imple ...
- Android:viewpager+ fragment模拟微信首页
viewpager+ fragment viewpager+ fragment模拟微信首页 1.前言 2.实现 viewpager+ fragment模拟微信首页 1.前言 ViewPager(视图滑 ...
- android左右滑动fragment,Android基于ViewPager+Fragment实现左右滑屏效果的方法
本文实例讲述了Android基于ViewPager+Fragment实现左右滑屏效果的方法.分享给大家供大家参考,具体如下: 1.xml布局模板 android:id="@+id/local ...
- android 底部tab效果,Android 仿微信底部渐变Tab效果
先来看一下效果图 除了第三个的发现Tab有所差别外,其他的基本还原了微信的底部Tab渐变效果 每个Tab都是一个自定义View,根据ImageView的tint属性来实现颜色渐变效果,tint属性的使 ...
- ViewPager+Fragment模拟微信首页详细步骤
实现步骤: 第一步:添加ViewPager2依赖 implementation 'androidx.viewpager2:viewpager2:1.0.0' 第二步:页面布局activity_main ...
- android 微信布局 字体,【Android】底部Tab+ViewPager(仿微信界面)
感谢 github的作者:wuyexiong 效果图(图片和文字都有渐变效果) 实现 主要用到自定义一个LinearLayout和ImageView 1.BottomIconView继承自ImageV ...
- Android studio实现底部导航,Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果...
BottomBar BottomBar是Github上的一个开源框架,因为从1.3.3开始不支持fragments了,要自己配置,弄了很久,不管是app的fragment还是V4 的程序总是总是闪退. ...
- 3分钟教你实现仿微信底部导航栏效果(BottomNavigationView + ViewPager)
文章目录 实现效果图 前言 XML布局 menu文件 ViewPager的使用 PagerAdapter(Java) Activity中实现 上下联动 侧滑带动按钮选择 点击底部按钮带动页面 自定义选 ...
- php仿微信底部菜单,Android实现简单底部导航栏 Android仿微信滑动切换效果
Android仿微信滑动切换最终实现效果: 大体思路: 1. 主要使用两个自定义View配合实现; 底部图标加文字为一个自定义view,底部导航栏为一个载体,根据需要来添加底部图标; 2. 底部导航栏 ...
最新文章
- Spring Boot: Tuning your Undertow application for throughput--转
- GDCM:检索dicom文件中某个位置存在的Icon测试程序
- 使用CXF 2.7.5出现的java.lang.RuntimeException: Cannot create a secure XMLInputFactory错误解决...
- zephir mysql_用Zephir编写php扩展库以及生成文档、IDE提示
- Java面向对象(15)--static关键字静态理解与使用
- mysql 表上限_mysql 数据库表的上限
- Mac 运行goland出现can‘t load package: package xxxx is not in GOROOT问题排查
- 2017.9.26 块的计数 思考记录
- 小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
- sql注入检测工具之sqlmap
- R安装时出现辑程包不存在,解决方法
- 【读书笔记】巴比伦富翁的理财课
- 如何读书阅读--每天一本书计划
- 在线JSON转TSV工具
- Spark SQL 初识
- ubuntu编译ffmpeg并且demo测试
- 2000-2013年工企专利匹配数据库
- 国内运营商DM功能介绍
- 浙江省计算机二级考试选择判断题库,浙江省计算机二级题库(选择题判断题).doc...
- Manjaro开机黑屏卡住 显卡驱动问题解决及配置源和搜狗输入法安装
热门文章
- python博客主题_博客园SimpleMemary主题美化教程
- 新浪下拉菜单(js原生版本)
- mfc调取摄像头显示并截图_用OpenCV在MFC Dialog中Picture控件上显示摄像头采集实时视频...
- Linux 操作系统(I)
- 设计学生证信息管理系统(C++实现,附源代码,详细解析)
- Unity3D基础31:脚本生命周期
- 互联网控制协议ICMP
- python 3.6.5 pillow 实现图片的切割
- [Python] zeros(r, c)和ones(r, c)和eye(n) 生成特殊矩阵
- [PyTorch] 深度学习框架PyTorch中的概念和函数