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

Android TabLayout使用记录

目录

一、使用TabLayout做导航栏(图标+标题)​编辑

1、activity布局

2、创建Tab数据类

3、逻辑部分

二、做切换卡片(标题+指示器)​编辑

1、创建相关资源

2.布局中设置指示器和文本样式

3.逻辑


详细学习:Android 原生 TabLayout 使用全解析,看这篇就够了_android tablayout-CSDN博客

一、使用TabLayout做导航栏(图标+标题)
1、activity布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"><androidx.viewpager2.widget.ViewPager2android:id="@+id/fragment_container"android:layout_width="match_parent"android:layout_height="0dp"app:layout_constraintBottom_toTopOf="@+id/tabLayout"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><com.google.android.material.tabs.TabLayoutandroid:id="@+id/tabLayout"android:layout_width="match_parent"android:layout_height="74dp"android:clipToPadding="false"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintStart_toStartOf="parent"app:tabIndicatorHeight="0dp"app:tabMode="fixed"app:tabRippleColor="@color/color_CCCCCC"app:tabSelectedTextColor="@color/color_3E3A39" /></androidx.constraintlayout.widget.ConstraintLayout>
2、创建Tab数据类
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes/*** @param title tab标签* @param iconSelectRes 选中图标* @param iconUnselectRes 未选中图标* @param fragment 显示的Fragment*/data class TabInfo(@StringRes val title: Int,@DrawableRes val iconSelectRes: Int,@DrawableRes val iconUnselectRes: Int,val fragment: Fragment
)
3、逻辑部分
import android.os.Bundle
import android.view.LayoutInflater
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayoutMediatorclass MainActivity : AppCompatActivity() {private val binding by lazy {ActivityMainBinding.inflate(LayoutInflater.from(this))}private val tabs by lazy {listOf(TabInfo(R.string.tab_home, R.drawable.ic_home, R.drawable.ic_home_not, HomeFragment()),TabInfo(R.string.tab_withdraw, R.drawable.ic_withdraw, R.drawable.ic_withdraw_not, WithdrawFragment()),TabInfo(R.string.tab_mine, R.drawable.ic_mine, R.drawable.ic_mine_not, MineFragment()))}private var selectTabIndex = 0override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)initTab()}fun initTab() {val myAdapter = MyFragmentAdapter(this)binding.fragmentContainer.apply {adapter = myAdapterTabLayoutMediator(binding.tabLayout, this) { tab, position ->val tabInfo = myAdapter.getTabInfo(position)tab.text = getString(tabInfo.title)tab.icon = ContextCompat.getDrawable(this@MainActivity,if (position == selectTabIndex) tabInfo.iconSelectRes else tabInfo.iconUnselectRes)// 添加点击监听tab.view.setOnClickListener {selectTabIndex = positiontabs.forEachIndexed { index, info ->val tab = binding.tabLayout.getTabAt(index)tab?.icon = ContextCompat.getDrawable(this@MainActivity,if (index == selectTabIndex) tabs[index].iconSelectRes else tabs[index].iconUnselectRes)}}}.attach()}}inner class MyFragmentAdapter(fragmentActivity: FragmentActivity) :FragmentStateAdapter(fragmentActivity) {override fun getItemCount(): Int = tabs.sizeoverride fun createFragment(position: Int): Fragment {return tabs[position].fragment}fun getTabInfo(position: Int): TabInfo {return tabs[position]}}
}
二、做切换卡片(标题+指示器)
1、创建相关资源

指定宽高的指示器drawable文件record_tab_indicator.xml,默认是满TabItem宽度的

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:width="37dp"  android:height="6dp"android:gravity="center"><shape><corners android:radius="3dp" /></shape></item>
</layer-list>

在styles.xml中创建标签文本样式

<resources><style name="recordTabText"><item name="android:textSize">18sp</item><item name="android:textStyle">bold</item><item name="android:textColor">@color/color_333333</item></style>
</resources>
2.布局中设置指示器和文本样式
 <com.google.android.material.tabs.TabLayoutandroid:id="@+id/tabLayout"android:layout_width="match_parent"android:layout_height="wrap_content"app:tabIndicator="@drawable/record_tab_indicator"app:tabIndicatorColor="#FC3F6B"app:tabMode="fixed"app:tabTextAppearance="@style/recordTabText"/>
3.逻辑
            binding.tabLayout.apply {addTab(tabLayout.newTab().setText(getString(R.string.gold_record)))addTab(tabLayout.newTab().setText(getString(R.string.withdraw_record)))addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {override fun onTabSelected(tab: TabLayout.Tab?) {type = tab?.position ?: 0//切换tab逻辑}override fun onTabUnselected(tab: TabLayout.Tab?) {}override fun onTabReselected(tab: TabLayout.Tab?) {}})tabLayout.getTabAt(1)?.select() //指定选中tab }

http://www.dtcms.com/a/427151.html

相关文章:

  • 打开这个你会感谢我的网站网络考试
  • 核心营销词库管理助力品牌提升竞争力
  • UNIX下C语言编程与实践19-UNIX 三级索引结构:直接索引、一级/二级/三级间接索引的文件存储计算
  • 有了实名制域名怎么做网站国内跨境电商公司排行榜
  • 每种字符至少取K个
  • random.gauss()函数和numpy.random.normal()函数生成正态分布随机数
  • 【C++】STL -- 仿函数的定义与使用
  • Linux新环境安装solana开发所需全部套件(持续更新)
  • 一个高性能的HTTP和反向代理服务器:Nginx
  • 人工智能客服应用如何重塑电商服务生态?智能AI软件带来的三大变革
  • 网站建设的注意学校网站开发方案模板
  • 分布式架构初识:为什么需要分布式
  • asp网站用ftp怎么替换图片办公室oa管理系统
  • 个性化的个人网站广州企业开办一网通
  • Transformer(一)---背景介绍及架构介绍
  • 【完整源码+数据集+部署教程】气动铣刀型号分类图像分割系统: yolov8-seg-C2f-SCConv
  • 【Android】强制使用 CPU 大核或超大核
  • 【算法竞赛学习笔记】基础概念篇:算法复杂度
  • SLA操作系统双因素认证实现Windows远程桌面OTP双因子安全登录—从零搭建企业级RDP安全加固体系
  • 现在主流的网站开发语言360房产网郑州官网
  • 石家庄哪个公司做网站好做外贸c2c网站有哪些
  • 伪路径约束
  • 新天力:以全链协同能力构筑食品容器行业领军优势
  • Markdown转换为Word:Pandoc模板使用指南
  • Cloudflare 开源 VibeSDK:开启“氛围编程”新时代的全栈 AI 应用生成平台
  • 汕头网站建设sagevis企业网站建设有什么好处
  • C语言趣味小游戏----猜数字小游戏
  • 多表关联对集中式数据库和分布式数据库系统冲击
  • Suifest 2025 活动速递
  • 交叉熵损失函数和负对数似然损失函数 KL散度