TabLayout+ViewPager+Fragment自定义tab添加小红点(kotlin事例)

2023-10-29

首先看哈效果:

下面是两个布局,一个主布局,一个tab的布局

主布局很简单tablayout+viewpager:

<?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:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/app_base_color">
    <android.support.design.widget.TabLayout
        android:id="@+id/mTabLayout"
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:layout_marginBottom="@dimen/titlebar_bottom"
        app:tabBackground="@color/color_ffffff"
        app:tabGravity="fill"
        app:tabIndicatorFullWidth="false"
        app:tabIndicatorColor="@color/app_theme"
        app:tabMode="scrollable"
        app:tabSelectedTextColor="@color/color_000000"
        app:tabTextColor="@color/color_666666">
    </android.support.design.widget.TabLayout>
    <android.support.v4.view.ViewPager
        android:id="@+id/mViewPager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v4.view.ViewPager>
</LinearLayout>

tab的布局如下,这里加入的小红点:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tvTabTitle"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:paddingLeft="@dimen/dp_8"
        android:paddingRight="@dimen/dp_8"
        android:layout_gravity="center"
        android:gravity="center"
        android:textColor="@color/color_333333"
        android:textSize="15sp" />
    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:paddingTop="@dimen/dp_5">
        <TextView
            android:id="@+id/tabRed"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="5"
            android:layout_gravity="center"
            android:gravity="center"
            android:textSize="@dimen/dp_10"
            android:textColor="@color/color_ffffff"
            android:background="@drawable/shape_red_oval_drawable" />
    </FrameLayout>
</FrameLayout>

主要关联代码:

var listFragment:MutableList<Pair<String,Fragment>> = mutableListOf("全部" to BureauFragment(),"待开局" to BureauFragment()
                        ,"已开局" to BureauFragment(),"已结束" to BureauFragment(),"已拒绝" to BureauFragment())
        //关键在于先关联viewpager,后修改tab布局(注意在绑定了viewpager后tablayout的tab已经被设置了,所以做修改操作就好了)
        mViewPager.adapter = TabPagerAdapter(supportFragmentManager,listFragment)
        mTabLayout.setupWithViewPager(mViewPager)
        mViewPager.currentItem = 0
        listFragment.forEachIndexed { i, pair ->
            //设置自定义显示小红点的布局
            var tab = mTabLayout.getTabAt(i)
            tab?.setCustomView(R.layout.item_tab_layout)
            var tvTabTitle = tab?.customView?.find<TextView>(R.id.tvTabTitle)
            tvTabTitle?.text = pair.first
        }

来看看TabPagerAdapter适配器



/**
 * Author:xqt
 * Email:zzq1573@gmail.com
 * Date: 2019/1/5
 * Description:tablayout+viewpager+fragment
 */
class  TabPagerAdapter<T:Fragment>(fm: FragmentManager, list: MutableList<Pair<String, T>>): FragmentPagerAdapter(fm) {
    private var flist = list
    //private var fm = fm
    override fun getItem(p0: Int): Fragment {
        return flist[p0].second
    }

    override fun getCount() = flist.size

    //如果不需要自定义tab的话这里就关联的每个tab的文字,当然这里需要自定义list可以自行简化下
    //override fun getPageTitle(position: Int): CharSequence? {
    //    return flist[position].first
    //}

}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TabLayout+ViewPager+Fragment自定义tab添加小红点(kotlin事例) 的相关文章

随机推荐

  • C++之I/0流操作(标准流、文件流、二进制操作等)

    目录 标准输入输出 文本文件输入输出 文件类型 文件打开方式 写文件 读文件 二进制文本输入输出 写文件 读文件 字符串输入输出 往流里面输出 从流里面读出 格式控制 流 stream 为C 的输入输出操作提供了许多的便利 通常我们使用的流
  • Django(9)-表单处理

    django支持使用类创建表单实例 polls forms py from django import forms class NameForm forms Form your name forms CharField label Your
  • 面试准备:Mybatis常见面试题汇总

    文章目录 1 和 的区别是什么 2 当实体类中的属性名和表中的字段名不一样 怎么办 3 模糊查询like语句该怎么写 4 Mybatis 一对一 一对多的xml怎么写 5 Dao 接口的工作原理是什么 Dao 接口里的方法 参数不同时 方法
  • Python中函数,类,模块,包,库的区别

    文章目录 关系图 参考文章 关系图 参考文章 借鉴了以下文章 Python中函数 类 模块 包 库的区别 一分钟带你分清Python的模块 包和库的区别 python中的模块 库 包有什么区别
  • c# 保存软件配置

    保存配置方法 一 Settings setting 文件 1 1 配置Settings settings文件 1 2 加载配置信息 1 3 保存配置信息 二 使用文本保存 2 1 引入命名空间 2 2 新增IniConfigHelper 类
  • 装win10提示“在EFI系统上,Windows只能安装到GPT磁盘”

    在安装界面 按 shift F10 键 在命令提示符窗口依次执行如下命令 输入 diskpart 命令后 按enter键 进入到 DISKPART 模式 输入 list disk 命令后 按enter键 查看电脑的硬盘 编号0 表示电脑的第
  • 【python文本分析】——基于股评文本的情绪分析

    目录 一 文本处理 1 精确模式 默认 2 全模式 3 搜索引擎模式 二 词云图 1 wordcloud模块导入 2 词云图实现 三 实例 利用股评进行情绪分析 1 数据来源及snownlp模块导入 2 代码实现 2 1 读取股评文件 2
  • windows 10 安装子系统(WSL2)

    以前在学习docker时 是在自己的虚拟机上进行的 最近刚换了电脑 想在windows中使用子系统来运行docker 现在WSL2要比以前的WSL1运行更快 io操作方面的很大的提升 在这里记录一下我的安装过程吧 希望小白们有些参考 关注微
  • 【使用mindspore复现segmenter语义分割算法时,loss一直在一个范围内附近波动,降不下去】

    使用mindspore复现segmenter语义分割算法 操作步骤 问题现象 1 即使训练了很多个epoch 精度一直下降不了 一直在1 2左右 测试出来的miou也是一个非常低的值 例如0 0198 2 目前尝试过不同的优化器SGD AD
  • 腾讯mini项目-【指标监控服务重构】2023-07-27

    今日已办 SigNoz Log Management SigNoz原生支持 OpenTelemetry 来收集日志 SigNoz 在收集器端进行了优化 为SigNoz中的日志添加了不同的功能 OpenTelemetry 提供了各种接收器和处
  • 合并两个有序数组

    给定两个有序整数数组 nums1 和 nums2 将 nums2 合并到 nums1 中 使得 num1 成为一个有序数组 说明 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 你可以假设 nums1 有足够的空间 空间大
  • es6 class类与class类中constructor

    序言 在es6 中的class关键字用于声明类 在此之前js一直没有类的概念 本文只要讨论class的与es5中对象的关系以及class中constructor的作用 关键字class ES6 的class可以看作只是一个语法糖 而类本身可
  • Android颜色透明度十六进制表示法

    Android开发中经常会用到色值的透明度 比如要70 透明或者30 透明 这时候就有点犯难了 要么Google 要么借助PS等工具 其实都比较麻烦 下面将把0到100的透明度按照5 的梯度列出 方便收藏使用 其实在开发的过程中我们会经常遇
  • php字段验证规则,ThinkPHP 自动验证及验证规则详解

    ThinkPHP 自动验证及验证规则详解 ThinkPHP 自动验证 ThinkPHP 内置了数据对象的自动验证功能来完成模型的业务规则验证 自动验证是基于数据对象的 而大多情况下数据对象是基于 POST表单 不是绝对的 创建的 基本的自动
  • scrapy POST方式抓取走过的坑

    背景 今天老板让核查新上线的app中的中标数据展示情况 一条一条数据点开看实在是太慢了 于是想抓包获取app请求的api接口以及传入的参数 获取返回的数据内容 将数据存储到sqlite3中直接通过执行sql来统计数据质量 先打开fiddle
  • XSS quiz 1~5解题方案

    第1题 第一题很简单 没做过滤 直接可A过 第二题 查询框中写123查看源码 需要先闭合左边的input 所以 gt 即可 第三题 本题有过滤当输入 gt 时发现引号 尖括号都被过滤 lt gt 分别变成了转义符 尝试Unicode编码也未
  • antd Table中显示图片

  • qt 里面使用webengine

    qt使用webengine 条件 qt在windows上使用webengine必须用visual studio 使用mingw无效 webengine可以集成我们得html5页面 这样可以让界面开发人员更加省心 code 1 包含qwebe
  • YouTube上的版权保护

    早在2007年的时候 我曾写过一篇名为 YouTube The Big Copyright Lie YouTube 关于版权的弥天大谎 的文章 表达了我对YouTube又爱又恨的情感纠结 现在回想一下你在YouTube上看过的所有视频 它们
  • TabLayout+ViewPager+Fragment自定义tab添加小红点(kotlin事例)

    首先看哈效果 下面是两个布局 一个主布局 一个tab的布局 主布局很简单tablayout viewpager