首页 > 其他分享 >Android Compose 使用Pager (with TabRow)

Android Compose 使用Pager (with TabRow)

时间:2023-11-27 21:36:49浏览次数:39  
标签:Compose TabRow pagerState currentPage Android modifier Pager page

Pager

基本内容看官方吧:Android Compose 中的分页器

不同页显示不同内容

错误示范

 @Composable
    HorizontalPager(state = pagerState, modifier.fillMaxHeight(),beyondBoundsPageCount = 2,verticalAlignment=Alignment.Top) {
        if (pagerState.currentPage==0){//使用pagerState.currentPage,会导致滑动动画有问题
        }
        else if (pagerState.currentPage==1){
        }
    }

使用pagerState.currentPage,会导致滑动动画有问题
image

正确做法

@Composable
HorizontalPager(state = pagerState, modifier.fillMaxHeight(),beyondBoundsPageCount = 2,verticalAlignment=Alignment.Top) {page->//使用这里的page,而不是pagerState.currentPage
        if (page==0){
        }
        else if (page==1){
        }
}

image

Pager with TabRow

一般如果是大页面,都是TabRow结合Pager一起使用。在compose中使两者产生联动很简单,对两者使用相同的元素即可。

@Composable
fun TestScreen(
    navController:NavController,
    modifier: Modifier,
) {
    //TabRow with Pager
    val pages = listOf("Main", "Field")
    val pagerState = rememberPagerState(pageCount = {pages.size}, initialPage = 0)//总页码,初始页码
//compose
    Scaffold() { contentPadding ->
        Column( modifier = modifier
            .fillMaxSize()
            .padding(contentPadding)
        ) {
            PrimaryTabRow(
                modifier = modifier
                    .fillMaxWidth(),
                selectedTabIndex = pagerState.currentPage,
            ) {
                pages.forEachIndexed { index, title ->
                    Tab(
                        text = { Text(text = title, maxLines = 2, overflow = TextOverflow.Ellipsis) },
                        onClick = {
                            scope.launch {
                                pagerState.scrollToPage(index, 0f)//Tab被点击后让Pager中内容动画形式滑动到目标页
                            }
                        },
                        selected = (index == pagerState.currentPage)
                    )
                }
            }
            HorizontalPager(state = pagerState, modifier.fillMaxHeight(),beyondBoundsPageCount = 2,verticalAlignment=Alignment.Top) {page->
                if (page==0){
                }
               else if (page==1){
                }
            }
        }
}

标签:Compose,TabRow,pagerState,currentPage,Android,modifier,Pager,page
From: https://www.cnblogs.com/kingwz/p/17860503.html

相关文章

  • 2048 ,Android 休闲益智游戏开发
    A.项目描述《2048》是一款经典的益智小游戏,它的目标是通过合并相同数字来达到2048这个最高分。该游戏规则简单,玩家需要通过滑动屏幕来移动方块,相同数字的方块会合并成一个新的数字方块。这样的简单操作让人可以轻松上手。《2048》小游戏app的技术原理主要涉及游戏逻辑、用户界面和......
  • 轻松实现海报换脸!相芯SDK海报换脸功能的简单集成方法(Android)
    相芯SDK的海报换脸功能是一种面部合成技术,允许用户将自己的脸部特征与指定的海报或图片进行合成,实现换脸的效果。该功能可以用于各种娱乐应用、社交媒体、相机应用和虚拟试妆等场景。1.功能介绍逼真和自然的换脸效果:相芯SDK使用先进的人脸识别和图像合成技术,确保换脸效果的逼真和......
  • Android对重启原因的记录
    事后log中,可以在prop.txt中获取到他们:./prop.txt:259:[persist.sys.boot.reason]:[]./prop.txt:260:[persist.sys.boot.reason.history]:[kernel_panic,bug,52663./prop.txt:789:[sys.boot.reason]:[kernel_panic,bug]./prop.txt:790:[sys.boot.reason.last]:[kernel_p......
  • Android 模拟器横向视图
    HowtochangeAndroidemulatortolandscapemode?ctrl + fn + F11 on Mac to change the landscape to portrait and vice versa.left-ctrl + F11 on Windows 7.ctrl + F11 on Linux.......
  • Android Intent打开指定网页【问题与方法】
    方法一.Intentintent; PackageManagerpackageMgr=getPackageManager(); intent=packageMgr.getLaunchIntentForPackage("com.android.chrome");intent.setPackage(null); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(......
  • Android Studio XML文件没有提示
    长路漫漫唯剑作伴原因:项目从AS3.5.2转到AS4.2.2后出现xml文件没有提示。解决:1.build:gradle:3.5.2换成最新的build:gradle:4.2.22.gradle-wrapper.properties由gradle-5.4.1-all.zip换成4.2.2最低要求版本gradle-6.7.1-all.zip项目下载构建完成即可......
  • Android学习 第三&四周
    主要内容1在AndroidStudio中配置了Copilot2学习了Android中权限的相关知识,学会了在布局中声明权限,在程序中动态申请权限的方法3完成了一个简易的本地视频播放器的demo,可以扫描本地的视频形成列表,并可以播放。......
  • 通过 docker-compose 快速部署 Rancher 保姆级教程
    目录一、概述二、开始编排部署Rancher1)部署docker2)部署docker-compose3)创建网络4)构建镜像5)编排docker-compose.yaml部署6)接入K8s集群1)部署k8s集群测试(已有可忽略)2)k8s上执行命令接入集群一、概述Rancher是一个开源的容器管理平台,它为企业提供了一个简化容器化应用部署......
  • Android平台GB28181设备接入模块开发填坑指南
    技术背景为什么要开发Android平台GB28181设备接入模块?这个问题不再赘述,在做Android平台GB28181客户端的时候,媒体数据这块,我们已经有了很好的积累,因为在此之前,我们就开发了非常成熟的RTMP推送、轻量级RTSP服务、录像模块、针对音视频的对接处理单元。这让我们在做Android平台GB28181......
  • 阿里内部流出最新的Android中高级面试题,赶紧看,晚了怕没了
    前言2023是最不平凡的一年,可能找工作的程序员在前半年感触不是很深,尤其是从铜三铁四之后,找工作是越来越难了,投出去的简历都是已读不回。其实,伴随着互联网行业寒冬的到来,各大企业都不敢大肆招聘,都是选择收缩发展,加上程序员内部越来越卷,要求越来越高了,要想在IT行业继续发展进阶拿高......