Android Jetpack Compose之TabRow的使用

news2024/12/23 10:25:58

Android Jetpack Compose是一个现代化的UI工具包,它让开发者可以以声明式的方式来构建出美观且功能强大的Android应用。在本文中,我们将详细介绍其中的一个重要组件——TabRow


一. TabRow简介

TabRow是Jetpack Compose中的一个组件,主要用于实现顶部导航栏的功能。它可以帮助我们创建一行的选项卡,用户可以通过点击不同的选项卡来切换到不同的视图或页面。

二. 如何使用TabRow

要在Jetpack Compose中使用TabRow,首先需要在你的@Composable函数中调用它。这里是一个简单的例子:

@SuppressLint("UnusedMaterialScaffoldPaddingParameter")
@Preview
@Composable
fun TabRowDemo(){
    val titles = listOf("Tab 1","Tab 2","Tab 3")
    var selectedTabIndex by remember{ mutableStateOf(0) }
    
    Scaffold(topBar = {
        TabRow(selectedTabIndex = selectedTabIndex){
            titles.forEachIndexed{ index, title ->  
            Tab(text = { Text(text = title)},
                selected = selectedTabIndex== index, onClick = {
                selectedTabIndex =index
            })
                
            }
        }
    },
    content = {

    }
    )
}

 在上述代码中,我们首先创建了一个包含三个选项卡标题的列表,并使用remember { mutableStateOf(0) }来创建一个可观察的状态,其初始值为0,代表选中第一个选项卡。然后,我们在ScaffoldtopBar中使用TabRow,并为每个标题创建一个Tab

三. 自定义TabRow

TabRow组件提供了许多参数,让开发者可以根据需要进行自定义。以下是一些常见的自定义选项:

  • modifier:这个参数可以用于调整选项卡行的大小、形状和位置等属性。
  • backgroundColorcontentColor:这些参数可以用于自定义选项卡行的背景颜色和内容颜色。
  • indicator:这个参数可以用于自定义选中的选项卡下方的指示器。

以下是一个自定义TabRow的例子:

@Preview
@Composable
fun tab(){
    val titles = listOf("Tab 1", "Tab 2", "Tab 3")
    var selectedIndex by remember { mutableStateOf(0) }

    TabRow(
        selectedTabIndex = selectedIndex,
        backgroundColor = Color.Red,
        contentColor = Color.Yellow,
        indicator = {tabPositions ->
            TabRowDefaults.Indicator(
                Modifier
                    .tabIndicatorOffset(tabPositions[selectedIndex])
                    .height(4.dp),
                 color = Color.Green
     )
    }){

        titles.forEachIndexed { index, title ->
            Tab(
                text = { Text(text = title)},
                selected = selectedIndex == index,
                onClick = { selectedIndex = index }
            )
        }
    }
}

 在这个例子中,我们在 TabRow 中添加了三个 Tab,每个 Tab 都有一个标题,并且我们在 onClick 事件中更新了 selectedIndex。这样,当你点击一个 Tab 时,selectedIndex 将被更新,相应的指示器也会被移动到正确的位置。

总的来说,Jetpack Compose中的TabRow是一个非常有用的组件,它提供了方便的方式来创建和自定义选项卡行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692875.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在家用电脑怎么赚钱,在家就能获得收益的三种方式

如何在家赚钱可能是许多人都困扰的问题之一。实际上,有很多在家赚钱的方法可供选择。然而,我在网上发现许多人缺乏学习的动力,不愿意承担风险,因此大约80%的人选择从事辛苦劳动或成为被剥削的人,导致他们连续几年在互联…

SpringBoot中的bean管理

一、获取bean 默认情况下&#xff0c;Spring项目启动时&#xff0c;会把bean都创建好放在IOC容器中&#xff0c;如果想要主动获取这些bean&#xff0c;可以通过如下方式: 根据name获取bean: object getBean (String name)根据类型获取bean: <T> T getBean (Class<…

8.1 PowerBI系列之DAX函数专题-进阶-解决列排序对计算的影响

需求 下列矩阵中&#xff0c;在月份列不按照原始数据的month_no排列时&#xff0c;能正确计算销售额占比&#xff0c;但是当月份按照month_no排序时就会出错&#xff0c;需要解决这个问题。 实现 month % divide([amount],calculate([amount],all(date[month desc]))) //排…

计算机网络—局域网

文章目录 ARP协议以太网以太网帧结构交换机交换机的端口划分 PPP协议 MAC地址 封装在链路帧中的地址&#xff0c;作为每一个接口的地址。&#xff08;一般是48bit大小&#xff09; MAC地址是刻画到我们物理接口上的&#xff0c;我们的网卡一旦出厂之后就会携带一个唯一的物理地…

升级HarmonyOS 3,通话一步切换更便捷

小伙伴们&#xff0c;今天和大家来聊聊HarmonyOS 3音频播控中心有哪些真香体验。不少朋友可能会脱口而出&#xff1a;一键切换音频App&#xff0c;一键实现音频跨设备流转&#xff0c;还有音频共享。这一次&#xff0c;音频播控中心又带来了新技能——一键切换通话音频。 相信大…

Java集合相关问题

java集合框架体系 数据结构 算法复杂度分析 时间复杂度分析&#xff1a;对代码运行时间所消耗时间多少进行分析空间复杂度分析&#xff1a;对代码运行所占用的内存的大小进行分析 时间复杂度 时间复杂度分析&#xff1a;来评估代码的执行耗时 假如执行每行代码的执行耗时一…

electron实现子窗口中创建右键菜单

后续可能会用electron开发一些工具&#xff0c;包括不限于快速生成个人小程序、开发辅助学习的交互式软件、帮助运维同学一键部署的简易版CICD工具等等。 开发进度&#xff0c;取决于我懒惰的程度。 不过不嫌弃的同学还是可以先关注一波小程序&#xff0c;真的发布工具了&…

Shopee(虾皮)运营没流量?没销量?只因你没掌握店铺引流方法大全

一、站内引流 - 类目 选品&#xff1a;侧重高性价比的潮流商品&#xff0c;及时上架销售热卖商品&#xff1b; 根据目标客户群选品&#xff1a;比如&#xff0c;如果60%-70%的用户为年轻女性&#xff0c;则关注性价比高的潮流商品&#xff1b; 根据重点品类选品&#xff1a;流…

C语言笔记-小智课堂-常用语法

嵌入式常用C语言语法 - 小智课程 类型&字节转换 define语法 define只是单纯替换&#xff0c;如果是运算记得加括号 防止多个文件调用重定义问题 define与typedef&#xff08;替换与别名&#xff09; enum语法 enum用于变量的枚举。 定义枚举类型的变量&#xff0c;变量…

MSP430G2553 Proteus仿真0~5V电压表数码管显示报警系统-0046

MSP430G2553 Proteus仿真0~5V电压表数码管显示报警系统-0046 Proteus仿真小实验&#xff1a; MSP430G2553 Proteus仿真0~5V电压表数码管显示报警系统-0046 功能&#xff1a; 硬件组成&#xff1a;51单片机 8位数码管MAX7219数码管驱动模块多个按键LED灯蜂鸣器 1.准确测量信…

43 # buffer 的应用

buffer Buffer 代表的都是二进制数据&#xff0c;代表是内存&#xff0c;它不能扩容&#xff08;java 数组不能扩容&#xff0c;想扩容可以使用动态数组&#xff0c;或者生成一个新的内存拷贝过去&#xff09; 服务端可以操作二进制&#xff0c;Buffer 可以和字符串进行相互转…

学习adaboost(二,第一次迭代,c#实现)

我觉得这两个公式推导的特别好。我们来搞第一次迭代&#xff1a; 我们取x<2.5,标签1&#xff0c;else&#xff0c;标签-1这个分类器&#xff0c;发现分错的是5&#xff0c;7&#xff0c;8三组数据 &#xff0c;正确的都由0.1变为0.0714了&#xff0c;降低了&#xff0c;错误…

课程20:API项目重构

🚀前言 本文是《.Net Core从零学习搭建权限管理系统》教程专栏的课程(点击链接,跳转到专栏主页,欢迎订阅,持续更新…) 专栏介绍:以实战为线索,基于.Net 7 + REST + Vue、前后端分离,不依赖任何第三方框架,从零一步一步讲解权限管理系统搭建。 专栏适用于人群:We…

Debezium系列之:记录一次Debezium集群服务器端口打满的原因和对应的解决方法

Debezium系列之:记录一次Debezium集群服务器端口打满的原因和对应的解决方法 一、背景二、查看被占端口使用情况三、查看日志四、定位原因五、快速解决六、再次查看服务器端口使用情况七、总结一、背景 运维Debezium集群,停止Debezium集群后,再次启动Debezium集群提示端口被…

一个注解让你的项目减少30%SQL代码量

今天给大家介绍一个很好用的开源项目&#xff1a;easy_trans&#xff0c;它能让你的项目减少30%的SQL代码量&#xff0c;接下来让我们进一步了解它。 什么是Easy_Trans Easy Trans是一款用于做数据翻译的代码辅助插件&#xff0c;利用MyBatis Plus/JPA/BeetlSQL 等ORM框架的能…

算法----使二进制字符串字符交替的最少反转次数

题目 给你一个二进制字符串 s 。你可以按任意顺序执行以下两种操作任意次&#xff1a; 类型 1 &#xff1a;删除 字符串 s 的第一个字符并将它 添加 到字符串结尾。 类型 2 &#xff1a;选择 字符串 s 中任意一个字符并将该字符 反转 &#xff0c;也就是如果值为 ‘0’ &…

django框架-2

创建项目 创建项目文件夹创建项目 django-admin startproject BaseDjangoProject 创建应用 python manage.py startapp goods settings.py 在最后面添加上应用goods INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contr…

Java字符串中字符的Unicode码点、编码

以前对于Java字符串中字符的Unicode码点、UTF编码没有仔细研究。今天研究了下。 Unicode是一个字符集&#xff0c;其实是一个映射&#xff0c;给每个字符映射了一个数值&#xff0c;称为码点&#xff08;Code Point&#xff09;。 而UTF-8、UTF-16、UTF-32则是对Unicode码点的转…

shiro反序列化漏洞

Shiro简述 Shiro 是 Java 的一个安全框架&#xff0c;执行身份验证、授权、密码、会话管理shiro默认使用了CookieRememberMeManager&#xff0c;其处理cookie的流程是&#xff1a;得到rememberMe的cookie值–>Base64解码–>AES解密–>反序列化 然而AES的密钥是硬编码…

今日分享:ai绘画工具

凯蒂是一位充满梦想和热情的年轻女孩。她从小就对艺术充满了浓厚的兴趣&#xff0c;尤其痴迷于绘画。然而&#xff0c;她一直感到自己的绘画技巧有限&#xff0c;无法将内心的想象力完美地呈现在画布上。她渴望找到一种方法来提升自己的创作能力&#xff0c;实现内心的艺术梦想…