CommonTabLayout+ViewPager快速完成APP首页搭建

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

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

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

compile ‘com.flyco.roundview:FlycoRoundView_Lib:[email protected]‘
compile ‘com.flyco.tablayout:FlycoTabLayout_Lib:[email protected]‘
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

原文地址:https://www.cnblogs.com/BobAdmin/p/8267203.html

时间: 2024-10-26 22:06:10

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

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

健生干货分享:第19篇 摘要:最近和两位准备开发app的创业者聊天,他们之前没有移动互联网的相关经验,有的是想法和资金.他们在纠结:想快速开发app,需要找外包吗? 最近和两位想开发app的创业者聊天,他们之前没有移动互联网的相关经验,有的是想法和资金.由于没有移动互联网的相关经验,想快速开发app,但又怕组建技术团队的时间过长,影响产品的开发,询问了我一些找外包的事项,我就在这篇文章里整理一下我的一些看法.以下的这些论述,都是针对整个app外包的情况(包含设计稿,原型图,前后端). 1.找外包

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

?[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4463931.html 联系方式:[email protected] [正文] 实现APP首页底部Tab的切换已经见过四五种方式了,先来看运行的效果图吧: 今天我们就用RadioGroup的方法来实现以下. [开发环境] 物理机版本:win 7旗舰版(64位) IDE版本:Android Stud

如何快速保存APP动效? 转

经验分享:如何快速保存APP动效? @AzTamic(百度MUX 交互设计师):很多小伙伴平时喜欢收集手机软件上的各种动效,但是又苦于不知道如何保存,今天讲一下利用itools+Ps保存动效的实例,如果你有更快捷的方法请联系我更正. 动效设计好文推荐:<帅呆了!一组令人愉悦的APP动效设计><高手之路!设计漂亮有趣的转场动效><还等什么!是时候来了解动态设计啦> 首先,请小伙伴们看看成果: 需要知道的: 1.iOS设备大多通过AirPlay来实现屏幕的投射和录像.我用的

如何利用Reveal神器查看各大APP UI搭建层级

作者 乔同X2016.08.22 19:45 写了3195字,被42人关注,获得了73个喜欢 如何利用Reveal神器查看各大APP UI搭建层级 字数413 阅读110 评论0 喜欢5 title: 如何利用Reveal神器查看各大APP UI搭建层级 date: 2016-08-11 categories: 破解 {% cq %} 做了大些的年的视图,你有没有真正的搭建过个正牌的UI,有没有想过如何UI进阶,有没有想过像京东,淘宝等知名APP版的UI是怎么搭建的呢?接下来我们就要开始解密他们

快速构建App界面的框架(●&#39;?&#39;●) -----SalutJs

前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着迭代的更新和业务的增加,成堆的代码被覆盖到项目中去了,使得这样一种技术架构方式变得异常的臃肿,很多界面变得异常的难以维护,因此卤煮打算重构公司前端架构. 卤煮的想法是:采用异步模块的加载方式,将不同微信菜单进入的界面分成若干的模块文件,这样的好处是按照需求加载界面,而且每个界面都单独成模块,便于维护和独立开发.于是

[转]快速构建App界面的框架(●&#39;?&#39;●) -----SalutJs

前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着迭代的更新和业务的增加,成堆的代码被覆盖到项目中去了,使得这样一种技术架构方式变得异常的臃肿,很多界面变得异常的难以维护,因此卤煮打算重构公司前端架构. 卤煮的想法是:采用异步模块的加载方式,将不同微信菜单进入的界面分成若干的模块文件,这样的好处是按照需求加载界面,而且每个界面都单独成模块,便于维护和独立开发.于是

如何用Axure快速制作APP交互原型

对于产品经理来说,熟练使用一些常用软件是一项十分必要的技能.其中,作为一个专业的快速原型设计工具,Axure RP无疑在产品人心中拥有一个难以撼动的地位.但就要PS一样,虽然足够专业,但同样也会存在使用灵活性的一些问题. 今天我们就谈谈,如何用Axure快速制作APP交互原型,不对,更准确的说法应该是:如何用Axure快速制作一份有水准的APP交互原型.作为一名优秀的产品人不仅要保证效率,也要保证质量才行. 首先抛出我的方法论:制作属于自己的元件库并要学会善用母版,熟悉APP设计规范并要有自己一

58红包APP系统定制搭建,58红包APP系统开发现成源码,58红包APP系统搭建

58红包APP系统搭建找[蔡经理 136-1236-3414 微|电]58红包APP系统定制搭建,58红包APP系统开发现成源码,58红包APP系统开发多少钱,58红包APP系统专业开发: 提示:专业软件开发公司,非运营方 58红包扫雷区: 10元5包奖励:小顺(1.88)小豹子(2.66)5.20(9.99)13.14(13.14) 20元5包奖励:小顺(1.88)小豹子(2.66)大顺(3.33)大豹(6.66)5.20(9.99)13.14(13.14) 50元6包奖励:小顺(1.88)小

使用Airtest超快速开发App爬虫

想开发网页爬虫,发现被反爬了?想对 App 抓包,发现数据被加密了?不要担心,使用 Airtest 开发 App 爬虫,只要人眼能看到,你就能抓到,最快只需要2分钟,兼容 Unity3D.Cocos2dx-*.Android 原生 App.iOS App.Windows Mobile--. Airtest是网易开发的手机UI界面自动化测试工具,它原本的目的是通过所见即所得,截图点击等等功能,简化手机App图形界面测试代码编写工作. 爬虫开发本着天下工具为我所用,能让我获取数据的工具都能用来开发爬