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

Jetpack Compose 选项卡控件实现

这里写目录标题

  • 介绍
  • 主体
  • 解释

介绍

实现选项卡控件
在这里插入图片描述

主体

import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Tab
import androidx.compose.material3.TabRow
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp

// 定义一个 Composable 函数,用于创建带有选项卡的布局
@Composable
fun TabLayoutExample() {
    // 使用 remember 来记住可变状态,selectedTabIndex 表示当前选中的选项卡索引
    var selectedTabIndex by remember { mutableStateOf(0) }
    // 定义选项卡的标题列表
    val tabTitles = listOf("选项卡 1", "选项卡 2")

    // 使用 Column 布局将选项卡和内容垂直排列
    Column(
        // 让 Column 填充整个可用空间
        modifier = Modifier.fillMaxSize()
    ) {
        // 创建一个 TabRow 用于显示选项卡
        TabRow(
            // 指定当前选中的选项卡索引
            selectedTabIndex = selectedTabIndex
            // 指定文字颜色
            contentColor = Color.White,
            // 指定背景颜色
            containerColor = Color(0xFF4F4F4F),
        ) {
            // 遍历选项卡标题列表
            tabTitles.forEachIndexed { index, title ->
                // 创建一个 Tab 组件
                Tab(
                    // 设置选项卡的文本内容
                    text = { Text(title) },
                    // 判断当前选项卡是否被选中
                    selected = selectedTabIndex == index,
                    // 当选项卡被点击时,更新 selectedTabIndex 的值
                    onClick = { selectedTabIndex = index }
                )
            }
        }
        // 根据选中的选项卡索引显示不同的内容
        when (selectedTabIndex) {
            0 -> ContentForTab1()
            1 -> ContentForTab2()
        }
    }
}

// 定义一个 Composable 函数,用于显示选项卡 1 的内容
@Composable
fun ContentForTab1() {
    // 使用 Column 布局将内容垂直排列
    Column(
        // 让 Column 填充整个可用空间,并添加内边距
        modifier = Modifier
           .fillMaxSize()
           .padding(16.dp),
        // 设置垂直排列方式为居中
        verticalArrangement = Arrangement.Center,
        // 设置水平排列方式为居中
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        // 显示文本内容
        Text("这是选项卡 1 的内容")
    }
}

// 定义一个 Composable 函数,用于显示选项卡 2 的内容
@Composable
fun ContentForTab2() {
    // 使用 Column 布局将内容垂直排列
    Column(
        // 让 Column 填充整个可用空间,并添加内边距
        modifier = Modifier
           .fillMaxSize()
           .padding(16.dp),
        // 设置垂直排列方式为居中
        verticalArrangement = Arrangement.Center,
        // 设置水平排列方式为居中
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        // 显示文本内容
        Text("这是选项卡 2 的内容")
    }
}    

解释

  1. TabLayoutExample 函数:

该函数是整个布局的核心,用于创建带有选项卡的界面。
selectedTabIndex 用于记录当前选中的选项卡索引,初始值为 0。
tabTitles 是一个包含选项卡标题的列表。
Column 用于将选项卡和内容垂直排列。
TabRow 用于显示选项卡,其中的 Tab 组件根据 selectedTabIndex 来判断是否选中,并在点击时更新 selectedTabIndex
when 语句根据 selectedTabIndex 的值显示不同的内容。

  1. ContentForTab1ContentForTab2 函数:

这两个函数分别用于显示选项卡 1 和选项卡 2 的内容。
它们都使用 Column 布局将内容垂直居中显示,并添加了内边距。
内容为简单的文本信息。
通过这种方式,你可以实现一个简单的选项卡布局,点击不同的选项卡可以显示不同的内容。

相关文章:

  • 数据结构-二叉树
  • 【Linux 维测专栏 2 -- Deadlock detection介绍】
  • NIO ByteBuffer 总结
  • WPF控件DataGrid介绍
  • Ubuntu常用命令大全 | 零基础快速上手指南
  • Python环境安装
  • 【C++】内存管理
  • Github 2025-03-23 php开源项目日报Top10
  • MySQL中的锁(全局锁、表锁和行锁)
  • Java19虚拟线程原理详细透析以及企业级使用案例。
  • SpringMVC 的面试题
  • Python Cookbook-4.11 在无须过多援引的情况下创建字典
  • CICDDevOps概述
  • PID参数整定:从“炼丹术士“到“系统调音师“的进化指南
  • SVN忽略不必提交的文件夹和文件方法
  • 网络基础(二)
  • 一文解读DeepSeek在法律商业仲裁细分行业的应用
  • 麒麟Win32运行环境
  • 【蓝桥杯速成】| 10.回溯切割
  • Spring Boot(十七):集成和使用Redis
  • 暴雨及强对流天气黄色预警已发布!南方进入本轮降雨最强时段
  • 老人刷老年卡乘车被要求站着?公交公司致歉:涉事司机停职
  • 青年与城市共成长,第六届上海创新创业青年50人论坛将举办
  • 退休11年后,71岁四川厅官杨家卷被查
  • 争抢入境消费红利,哪些城市有潜力?
  • 戴紫薇评《不像说母语者》丨后殖民语境下的母语追寻