当前位置: 首页 > news >正文

android tabbar框架,Android 自定义tabbar 用viewPage实现

底部tabbar使用的 JPTabBar

activity中的布局

android:layout_width="match_parent"

android:layout_height="0dp"

android:id="@+id/viewPage"

app:layout_constraintTop_toTopOf="parent"

app:layout_constraintBottom_toTopOf="@+id/line"

android:background="@color/colorAccent"/>

android:id="@+id/line"

android:layout_width="match_parent"

android:layout_height="0.5dp"

android:background="@color/line"

app:layout_constraintTop_toBottomOf="@id/viewPage"

app:layout_constraintBottom_toTopOf="@+id/tabbar"/>

android:id="@+id/tabbar"

android:layout_width="match_parent"

android:layout_height="56dp"

app:layout_constraintBottom_toBottomOf="parent"

android:background="#fff"

/>

TabViewPage 去掉滑动手势

package com.example.fordgao.travel.baseUI;

import android.content.Context;

import android.support.v4.view.ViewPager;

import android.util.AttributeSet;

import android.view.MotionEvent;

public class TabViewPage extends ViewPager {

public TabViewPage(Context context) {

super(context);

}

public TabViewPage(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

return false;

}

@Override

public boolean onTouchEvent(MotionEvent ev) {

return false;

}

@Override

public void setCurrentItem(int item) {

super.setCurrentItem(item, false);

}

}

activity代码

JPTabBar jpTabBar;

@Titles

private static final String[] mTitles = {"首页","订机票","我的"};

@SeleIcons

private static final int[] mSeleIcons = {R.mipmap.tab_home_selected,R.mipmap.tab_air_selected,R.mipmap.tab_mine_selected};

@NorIcons

private static final int[] mNormalIcons = {R.mipmap.tab_home, R.mipmap.tab_air, R.mipmap.tab_mine};

ViewPager viewPager;

List mFragmentList = new ArrayList();

MainPagerAdapter mViewPagerFragmentAdapter;

FragmentManager mFragmentManager;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Tool.setStatusBarColor(this, R.color.colorNav);

overridePendingTransition(R.anim.anim_alpha_show, R.anim.view_stay);

jpTabBar = findViewById(R.id.tabbar);

jpTabBar.setSelectedColor(ContextCompat.getColor(this, R.color.tabSColor));

jpTabBar.setTabTextSize(12);

viewPager = findViewById(R.id.viewPage);

mFragmentManager = getSupportFragmentManager();

Fragment_home home = new Fragment_home();

Fragment_air air = new Fragment_air();

Fragment_mine mine = new Fragment_mine();

((ArrayList) mFragmentList).add(home);

((ArrayList) mFragmentList).add(air);

((ArrayList) mFragmentList).add(mine);

mViewPagerFragmentAdapter = new MainPagerAdapter(mFragmentManager, (ArrayList) mFragmentList);

viewPager.setAdapter(mViewPagerFragmentAdapter);

viewPager.setCurrentItem(0);

jpTabBar.setTabListener(new OnTabSelectListener() {

@Override

public void onTabSelect(int index) {

viewPager.setCurrentItem(index);

}

@Override

public boolean onInterruptSelect(int index) {

return false;

}

});

}

import java.util.ArrayList;

public class MainPagerAdapter extends FragmentPagerAdapter {

ArrayList list;

//通过构造获取list集合

public MainPagerAdapter(FragmentManager fm, ArrayList list) {

super(fm, FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);

this.list=list;

}

//设置每一个的内容

@Override

public Fragment getItem(int arg0) {

// TODO Auto-generated method stub

return list.get(arg0);

}

//设置有多少内容

@Override

public int getCount() {

// TODO Auto-generated method stub

return list.size();

}

}

Fragment基类使用懒加载数据

import androidx.annotation.LayoutRes;

import androidx.annotation.NonNull;

import androidx.annotation.Nullable;

import androidx.fragment.app.Fragment;

public abstract class BaseLazyFragment extends Fragment {

private boolean isFirst; // 是否首次加载

@Nullable

@Override

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

return inflater.inflate(getLayoutId(), container, false);

}

@LayoutRes

protected abstract int getLayoutId();

/**

* 懒加载

*/

protected abstract void onLazyLoad();

@Override

public void onResume() {

super.onResume();

if (!isFirst) {

initUiAndListener();

onLazyLoad();

isFirst = true;

}

}

/**

* 控件初始化和监听

*/

protected abstract void initUiAndListener();

}

在子类Fragment中

import base.components.BaseLazyFragment;

public class FragmentHome extends BaseLazyFragment {

@Override

protected int getLayoutId() {

return R.layout.fragment_home;

}

@Override

protected void onLazyLoad() {

}

@Override

protected void initUiAndListener() {

}

}

相关文章:

  • jdbc参数
  • Linux运维人员最常用150个命令汇总
  • html js文件调用函数,我怎么把js文件里的函数调用到html文件中,并使两个函数依次运行?...
  • [poj] 3422 Kaka's Matrix Travels || 最小费用最大流
  • html引用json文件没有数据,json文件怎么使用
  • html做微信logo,HTML5新特性之用SVG绘制微信logo
  • bacula-web 安装部署流程
  • html获取鼠标绝对坐标,JavaScript获取网页元素的绝对坐标
  • 接口的无穷魅力
  • html手机网页适配 rem,移动端网页布局适配rem方案小结
  • html网页中图片展示为碎片,基于HTML代码实现图片碎片化加载功能
  • 自定义快捷键--向前/向后/全文搜索
  • 组装台式计算机需要哪些硬件,电脑硬件有哪些?组装一台电脑需要哪些配件详解...
  • linux系统一些信息(待整理)
  • html里设置选中过渡时间,HTML / CSS – 过渡选择器
  • #Java异常处理
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • bootstrap创建登录注册页面
  • exports和module.exports
  • input实现文字超出省略号功能
  • jquery cookie
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • python大佬养成计划----difflib模块
  • Sass Day-01
  • swift基础之_对象 实例方法 对象方法。
  • vue-loader 源码解析系列之 selector
  • Vultr 教程目录
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 缓存与缓冲
  • 经典排序算法及其 Java 实现
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 如何利用MongoDB打造TOP榜小程序
  • 我的面试准备过程--容器(更新中)
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 怎么将电脑中的声音录制成WAV格式
  • 阿里云移动端播放器高级功能介绍
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • #LLM入门|Prompt#3.3_存储_Memory
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (十八)SpringBoot之发送QQ邮件
  • (转载)hibernate缓存
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .java 9 找不到符号_java找不到符号
  • .naturalWidth 和naturalHeight属性,
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET单元测试
  • 。Net下Windows服务程序开发疑惑
  • @requestBody写与不写的情况
  • [ Linux ] Linux信号概述 信号的产生
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [51nod1610]路径计数