款APP开始的时候往往少不了多页面的切换,这就涉及到viewpager的使用,以前往往用Google自带的效果去实现,比较麻烦不说,后面做出来的效果还不如人意。

下面就利用CommonTabLayout+ViewPager来实现类似各电商APP首页的效果;

搭建很简单,第一步,新建一个工程。在build.gradle里面加入下面的引用:

compile 'com.flyco.roundview:FlycoRoundView_Lib:1.1.2@aar'
compile 'com.flyco.tablayout:FlycoTabLayout_Lib:1.5.0@aar'
compile 'com.android.support:design:24.2.1'compile 'com.nineoldandroids:library:2.4.0'

这样就能使用CommTabLayout插件了;

下面是activity_main.xml文件,我在里面加入了一个FloatingActionButton。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"> <android.support.v4.view.ViewPager
android:id="@+id/view_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/> <android.support.design.widget.FloatingActionButton
android:id="@+id/float_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="10dp"
android:layout_marginRight="10dp"
app:backgroundTint="#FFFFFF"
android:background="@drawable/ic_arrow_drop_down_black_24dp"/>
</RelativeLayout> <com.flyco.tablayout.CommonTabLayout
android:id="@+id/tab_main"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="#FFFFFF"
app:tl_iconGravity="LEFT"
app:tl_iconHeight="20dp"
app:tl_iconMargin="5dp"
app:tl_iconWidth="20dp"
app:tl_indicator_bounce_enable="false"
app:tl_indicator_color="@color/colorPrimary"
app:tl_indicator_gravity="TOP"
app:tl_textSelectColor="@color/colorPrimary"
app:tl_textUnselectColor="#DDD"
app:tl_textsize="15sp"
app:tl_underline_color="#DDDDDD"
app:tl_underline_gravity="TOP"
app:tl_underline_height="1dp"/> </LinearLayout>

先创建几个fagment用来做viewPager的元素,我在viewPager里面加了三个fragment,都是非常简单的布局;这些fragment继承了我自己创建的一个BaseFragment;

BaseFragment

package com.learn.bob.testfragmentadapter;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment; public class BaseFragment extends Fragment { public int dialogTheme; public Context mContext; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
} @Override
public void onPause() {
super.onPause();
} @Override
public void onResume() {
super.onResume();
} }
package com.learn.bob.testfragmentadapter;

import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; /**
* Created by Administrator on 2018/1/7.
*/ public class ThirdFragment extends BaseFragment { private Context mContext; @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mContext = getActivity();
return inflater.inflate(R.layout.fragment_thirdd, container, false);
} @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
initView();
} private void initView(){ }
}

下面是MainActivity,

package com.learn.bob.testfragmentadapter;

import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast; import com.flyco.tablayout.CommonTabLayout;
import com.flyco.tablayout.listener.CustomTabEntity;
import com.flyco.tablayout.listener.OnTabSelectListener; import java.util.ArrayList;
import java.util.List; public class MainActivity extends AppCompatActivity{ private ViewPager mViewPager;
private CommonTabLayout mTab;
private FirstFragment firstFragment;
private FirstReplaceFragment firstReplaceFragment;
private SecondFragment secondFragment;
private ThirdFragment thirdFragment;
private ViewPagerAadpter viewPagerAadpter;
private List<BaseFragment> fragmentList;
private ArrayList<CustomTabEntity> mTabEntities = new ArrayList<>();
private FloatingActionButton mBtn; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView(){
mViewPager = (ViewPager)findViewById(R.id.view_main);
mTab = (CommonTabLayout) findViewById(R.id.tab_main);
mBtn = (FloatingActionButton)findViewById(R.id.float_button); mBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(null != firstFragment){
// Toast.makeText(MainActivity.this,"点击了",Toast.LENGTH_LONG).show(); }
}
}); if(null == fragmentList){
fragmentList = new ArrayList<BaseFragment>();
} if(null == firstFragment){
firstFragment = new FirstFragment();
fragmentList.add(firstFragment);
mTabEntities.add(new TabEntity("首页",R.mipmap.ic_launcher,R.mipmap.ic_launcher));
} if(null == secondFragment){
secondFragment = new SecondFragment();
fragmentList.add(secondFragment);
mTabEntities.add(new TabEntity("扉页",R.mipmap.ic_launcher,R.mipmap.ic_launcher));
} if(null == thirdFragment){
thirdFragment = new ThirdFragment();
fragmentList.add(thirdFragment);
mTabEntities.add(new TabEntity("尾页",R.mipmap.ic_launcher,R.mipmap.ic_launcher));
} viewPagerAadpter = new ViewPagerAadpter(getSupportFragmentManager(),fragmentList);
mViewPager.setAdapter(viewPagerAadpter);
mTab.setTabData(mTabEntities); mViewPager.setOffscreenPageLimit(3);

//为tab页的点击添加监听事件
mTab.setOnTabSelectListener(new OnTabSelectListener() {
@Override
public void onTabSelect(int position) {
mViewPager.setCurrentItem(position);
} @Override
public void onTabReselect(int position) { }
});

//为viewPager的滑动添加监听事件
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override
public void onPageSelected(int position) {
mTab.setCurrentTab(position);
} @Override
public void onPageScrollStateChanged(int state) { }
}); }

//viewPager的适配器
private class ViewPagerAadpter extends FragmentPagerAdapter{ private List<BaseFragment> fragments;
private FragmentManager fragmentManager; public ViewPagerAadpter(FragmentManager fm, List<BaseFragment> fragmentList) {
super(fm);
this.fragments = fragmentList;
this.fragmentManager = fm;
} @Override
public Fragment getItem(int position) {
return fragments.get(position);
} @Override
public int getCount() {
return fragments.size();
}
} }

在CusstommonTabEntity的基础上我添加了一个TabEntity的实体类来定义我的tab页;

package com.learn.bob.testfragmentadapter;

import com.flyco.tablayout.listener.CustomTabEntity;

/**
* Created by bob on 2017-4-12 14:37
*/ public class TabEntity implements CustomTabEntity {
public String title;
public int selectedIcon;
public int unSelectedIcon; public TabEntity(String title, int selectedIcon, int unSelectedIcon) {
this.title = title;
this.selectedIcon = selectedIcon;
this.unSelectedIcon = unSelectedIcon;
}
public TabEntity(String title) {
this.title = title;
} @Override
public String getTabTitle() {
return title;
} @Override
public int getTabSelectedIcon() {
return selectedIcon;
} @Override
public int getTabUnselectedIcon() {
return unSelectedIcon;
}
}

这是最终的效果,在xml里面能够设置下面tab页滑动时线条文字显示的颜色,也可以设置成无线条

项目GitHub地址:https://github.com/bobLion/TestFragmentAdapte.git

CommonTabLayout+ViewPager快速完成APP首页搭建的更多相关文章

  1. app整体搭建环境:tabBar切换不同控制器的封装(自定义导航+自定义uiviewcontroler+系统自带tabbar+自定义tabbarController)

    首先,一个app的搭建环境非常重要.既要实现基本功能,又要考虑后期优化的性能. 现在很多应用不仅仅是系统自带的控制器,由于需求复杂,基本上需要自定义多控制器来管理. 新建一个BasicNavigati ...

  2. 使用hubuild,mui开发微信app—首页(一)

    写在前面 本系列文章我将介绍一下从零开始利用hubuild,mui实现微信app的开发,该系列是个人学习记录,所以在每篇文章中,都是从怎么去实现开始讲解,然后再把实例中涉及知识点做一个概述. 创建一个 ...

  3. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP

      前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用HTML5开发手机APP,而随着手机硬件设备配置的不断提升,各种开发框架的不断优化,也使着H5开发的 ...

  4. 十九. 想快速开发app,需要找外包吗?

    健生干货分享:第19篇 摘要:最近和两位准备开发app的创业者聊天,他们之前没有移动互联网的相关经验,有的是想法和资金.他们在纠结:想快速开发app,需要找外包吗? 最近和两位想开发app的创业者聊天 ...

  5. Mockplus教程:分分钟搞定APP首页原型设计

    Mockplus是一款快速原型设计工具,支持包括APP原型在内的多种原型与线框图设计.除了快速,Mockplus广受欢迎更因为它极低的上手门槛.今天小编就为大家展示如何用Mockplus在3分钟内完成 ...

  6. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)

    出处:http://www.cnblogs.com/jerehedu/p/7832808.html  前  言 JRedu 随着HTML5的不断发展,移动开发成为主流趋势!越来越多的公司开始选择使用H ...

  7. 回答了这四个问题,你就可以打造最佳App首页

    如果把手机APP比作人的话,首页就是脸面了.首页是一款产品的大门,好的开头就是成功的一半. 调查表示,26%的手机APP的平均使用次数只有一次.对首次使用产品的用户而言,首页的好坏关乎到用户对该产品的 ...

  8. Android自定义控件----RadioGroup实现APP首页底部Tab的切换

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  9. 【个人笔记】003-PHP基础-01-PHP快速入门-03-PHP环境搭建

    003-PHP基础-01-PHP快速入门 03-PHP环境搭建 1.客户端(浏览器) IE FireFox CHROME Opera Safari 2.服务器 是运行网站的基本 是放置程序代码的地方 ...

随机推荐

  1. Urlrewritefilte

    Urlrewritefilter是通过filter的形式,过滤所有的请求,然后再根据配置文件来转换成真正要访问的URL. 好处是隐藏真正的URL和美化提供给客户的URL. 比如,你的首页是www.** ...

  2. varchar2(100 char)是什么意思

    最佳答案   varchar2(100 char)最长可以插入100个任意字符而varchar2(100)最长可以插入100个英文字符

  3. mount nfs 各版本之间的转换

    [root@one1-fst-hx ~]# mount.nfs 182.168.2.49:/mnt/sdb/nfs /mnt/nfs2/ nomand,-o vers=3[root@one1-fst- ...

  4. uva12105 Bigger is Better

    更简单的做法:定义状态dp[i][j]表示在已经用了i根火柴的情况下拼出来了剩余部分(是剩余部分,不是已经拼出来了的)为j(需要%m)的最大长度,一个辅助数组p[i][j]表示状态[i][j]的最高位 ...

  5. IIS实现HTTPS的主机名绑定

    默认情况下,IIS中HTTPS 绑定是无法指定主机名的解决办法:通过手工修改 IIS 配置来实现主机头绑定.打开如下位置的文件. C:\Windows\system32\inetsrv\config\ ...

  6. 《编译原理》画 DAG 图与求优化后的 4 元式代码- 例题解析

    <编译原理>画 DAG 图与求优化后的 4 元式代码- 例题解析 DAG 图(Directed Acylic Graph)无环路有向图 (一)基本块 基本块是指程序中一顺序执行的语句序列, ...

  7. PowerShell(PHPStorm terminal with PowerShell)运行git log中文乱码

    解决方案: 1)以管理员身份运行PowerShell 2)新建一个针对PowerShell的Pofile文件 New-Item -Path $Profile -ItemType file -Force ...

  8. Django中对接第三方支付(支付宝)实现支付的流程

    1. 业务逻辑准备 1. 使用沙箱提供的商家环境 沙箱环境:是支付宝提供给开发者的模拟支付的环境 沙箱应用:https://docs.open.alipay.com/200/105311 沙箱账号:h ...

  9. 解决每次打开pycharm直接进入项目的方法

  10. pwnable.kr cmd1之write up

    看一下源代码: #include <stdio.h> #include <string.h> int filter(char* cmd){ ; r += strstr(cmd, ...