Jetpack Compose 核心组件(Text, Images, Buttons)(6)

导读大纲

    • 1.1 基本组件介绍
    • 1.2 Text
      • 1.2.1 基本用法
      • 1.2.2 设计文字风格
    • 1.3 Image组件
      • 1.3.1 从各种来源加载图片
      • 1.3.2 关键属性
      • 1.3.3 如何加载和显示不同类型的图像
      • 1.3.4 内容描述和无障碍访问:
    • 1.4 Button组件
      • 1.4.1 基本用法
      • 1.4.2 装饰和自定义
      • 1.4.3 处理按钮点击
      • 1.4.4 重要考虑因素

1.1 基本组件介绍

  1. 在 Jetpack Compose 的世界里,核心组件构建 Android UI的基础元素

    • 这些可组合元素是由 Compose 框架提供的预构建 UI 组件
    • 它们是创建从简单文本显示复杂交互式布局的基本构件
  2. 核心组件的用途

    • 简化用户界面开发
      1. 核心可组合元素抽象化创建和管理用户界面元素的复杂性.
      2. 无需编写冗长的代码填充布局、创建视图和设置属性
        • 只需使用可组合函数,就能事半功倍地实现同样的效果.
    • 确保一致性
      1. 核心组件遵循 Material Design 原则
        • 可确保在您的应用程序中提供视觉一致、用户友好的体验
      2. 它们提供一套遵循既定设计准则的标准化组件
        • 为您节省从头开始创建自定义UI元素所需的时间和精力
    • 优化性能
      1. Jetpack Compose 在设计时充分考虑性能
      2. 对核心组件进行优化,以实现高效的渲染和状态管理
        • 从而使用户界面更加流畅、反应更加灵敏
  3. 基本构件

    • 核心可组合元素可以看作是 Jetpack Compose 的基本词汇
      1. 它们包括用于显示文本(Text)、图片(Image)、按钮(Button)等的元素
    • 这些元素可以在布局(如列、行和框)中组合和排列
      1. 创建复杂的用户界面结构
  4. 在用户界面创建中的重要性

    • 如果没有核心组件,构建 Jetpack Compose UI将是一项艰巨的任务
      1. 它们为UI开发提供坚实的基础和便捷的起点
    • 通过了解如何使用和定制这些核心构件
      1. 您可以相对轻松地创建各种用户界面

1.2 Text

  1. Text组件是在 Jetpack Compose 中呈现文本内容的常用工具
    • 它的用途非常广泛,可以显示简单的字符串、样式文本,甚至是带格式的富文本

1.2.1 基本用法

  1. 最简单的方法是,Text 可组合元素接收一个文本参数,即要显示的字符串:
@Composable
fun SimpleText() {Text(text = "Hello, Jetpack Compose!")
}

1.2.2 设计文字风格

  1. Text组件提供大量属性来定制文本的外观
    • <1> fontSize 控制文字的大小
      1. 使用sp(与比例无关的像素)调整字体大小,以适应用户的屏幕密度
      2. 实在搞不清sp和dp的, 直接上才艺:字体大小使用sp, 布局尺寸使用dp
    • <2> fontWeight 确定文本的粗细
      1. 例如, FontWeight.Normal , FontWeight.Bold
    • <3> color 设置文本的颜色
      1. 可以使用标准颜色值或创建自定义颜色值
    • <4> style 允许为文本应用TextStyle
      1. 文本样式包括fontFamily、fontSize、fontWeight、color和其他文本属性
        title
        title
Text(text = "Large Text", fontSize = 24.sp)              // <1> 
Text(text = "Bold Text", fontWeight = FontWeight.Bold)   // <2> 
Text(text = "Blue Text", color = Color.Blue)             // <3> 
val myStyle = TextStyle(                                 // <4>fontFamily = FontFamily.Serif,fontSize = 18.sp,fontWeight = FontWeight.SemiBold
)
@Composable
fun SimpleText() {Text(text = "Hello, Jetpack Compose!",style = myStyle                                  // <4>)
}
  1. 修改器(Modifiers)是 Jetpack Compose 的一项强大功能
    • 用于定制元素外观、行为以及组件布局
    • <1> 对Text组件应用修改器,以实现各种效果
      1. padding : 在文本周围添加填充
      2. background: 设置文本的背景颜色
      3. border: 在文本周围添加边框
      4. clickable: 使文本可点击(类似超链接)
@Composable
fun SimpleText() {Text(text = "Padded and Clickable Text",modifier = Modifier                         // <1>.padding(16.dp).clickable { /* Handle click */ })
}

1.3 Image组件

  1. Image composable 是在 Jetpack Compose UI 中显示图片的基本工具
    • 无论是简单的图标、照片还是复杂的矢量图形
    • Image composable 都能以灵活高效的方式将视觉效果整合到App中

1.3.1 从各种来源加载图片

  1. 可绘制资源(Drawable Resources)
    • 存储在项目 res/drawable 文件夹中的图片
      1. 可以使用 PainterResource 加载它们
Image(painter = painterResource(id = R.drawable.my_image),contentDescription = "My Image"
)
  1. 位图: 以Bitmap对象表示的图像
val bitmap = BitmapFactory.decodeResource(resources, R.drawable.my_image)
Image(bitmap = bitmap.asImageBitmap(), contentDescription = "My Image")
  1. Vector Drawables
    • 存储在项目 res/drawable 文件夹中的可缩放矢量图像
      1. 可以使用 painterResource 载入它们
Image(painter = painterResource(id = R.drawable.my_vector_image),contentDescription = "My Vector Image"
)
  1. 图像 URI
    • 从 Uri 对象表示的 URL 或其他来源加载的图像
val imageUri = "https://www.example.com/my_image.jpg"
AsyncImage(model = imageUri,contentDescription = "My Image",
)
  1. 其他来源: Jetpack Compose 还支持从 File 对象等其他来源加载图片

1.3.2 关键属性

  1. Image可组合元素具有几个重要属性:
    • painter 最基本的属性
      1. 指定加载图像的方式, 根据图片来源
        • 可以使用 painterResource、painterFile 或其他 Painter 实现
    • contentDescription 可访问性的关键属性
      1. 它为视力受损或使用屏幕阅读器的用户提供图像的文字描述
      2. 请务必提供有意义的描述,以提高应用程序的可访问性.
    • contentScale 决定图像如何缩放以适应可用空间,常用值包括
      1. ContentScale.Fit
      2. ContentScale.Crop
      3. ContentScale.FillBounds
    • modifier: 与其他可组合元素一样
      1. 可以使用修改器自定义图像组件的外观和行为
        title

1.3.3 如何加载和显示不同类型的图像

  1. 从本地加载使用前两种, 最后一种是从网络上加载图片
    • <1> 需要安装依赖库
// Drawable Resource
Image(painter = painterResource(id = R.drawable.my_image),contentDescription = "My Image"
)
// Vector Drawable
Image(painter = painterResource(id = R.drawable.my_vector_image),contentDescription = "My Vector Image"
)
// Image from URL       <1>
AsyncImage(model = "https://www.example.com/my_image.jpg",contentDescription = "My Image",
)

1.3.4 内容描述和无障碍访问:

  1. contentDescription 属性

    • 对于让有视觉障碍的用户访问您的应用程序至关重要
  2. 提供 contentDescription 属性后

    • 屏幕阅读器就可以公布图片的描述,让用户了解图片的内容
Image(painter = painterResource(id = R.drawable.profile_picture),contentDescription = "Profile picture of the user"
)

1.4 Button组件

  1. 按钮组件是在 Jetpack Compose 中创建交互式用户界面的基本要素

  2. 按钮是用户在应用程序中触发操作的主要方式

    • 因此对导航、表单提交和其他交互任务至关重要

1.4.1 基本用法

  1. 创建按钮的最简单方法在按钮内容中提供要显示的文本
    • <1> onClick lambda 是定义点击按钮时应执行的操作
@Composable
fun MyButton() {Button(onClick = { /* Handle button click */ }) {   // <1>Text("Click Me")}
}
  1. 按钮元素提供多种属性来定制其外观和行为
    • onClick
      1. 点击按钮时执行的 lambda 函数
        • 将在此输入处理按钮操作的代码
    • modifier
      1. 用于为按钮应用修改器,就像使用其他可组合元素一样
      2. 您可以添加padding、更改背景颜色、添加边框
    • enabled
      1. 布尔值,用于控制按钮是启用还是禁用
      2. 禁用按钮显示为灰色,且不可点击
    • colors
      1. 可自定义按钮在不同状态下(如正常、按下、禁用)的颜色
        title
        title

1.4.2 装饰和自定义

  1. 使用modifiers和colors属性来设计按钮样式,使其与应用程序的设计相匹配
    • <1> 带padding的简约按钮, 风格高雅
    • <2> 带自定义颜色的按钮
@Composable
fun MyButton() {// <1>Button(onClick = { /* ... */ },modifier = Modifier.padding(8.dp),elevation = ButtonDefaults.buttonElevation(defaultElevation = 6.dp,pressedElevation = 8.dp,disabledElevation = 0.dp)) {Text("Elevated Button")}// <2>val buttonColors = ButtonDefaults.buttonColors(containerColor = Color.Blue,contentColor = Color.White)Button(onClick = { /* ... */ },colors = buttonColors) {Text("Custom Button")}
}

1.4.3 处理按钮点击

  1. 定义点击按钮时发生的操作,您需要在 onClick lambda 编写相应的代码
    • <1> 当点击时, 这里 Toast 一条消息
Button(onClick = {// <1>Toast.makeText(context, "Button clicked!", Toast.LENGTH_SHORT).show()},modifier = Modifier.padding(8.dp),elevation = ButtonDefaults.buttonElevation(defaultElevation = 6.dp,pressedElevation = 8.dp,disabledElevation = 0.dp)
) {Text("click me")
}

1.4.4 重要考虑因素

  1. 可访问性

    • 始终为图片按钮或没有文本标签的按钮提供 contentDescription
    • 这样可以确保有视觉障碍的用户了解按钮的用途.
  2. 状态管理

    • 在更复杂的场景中,可能需要根据应用程序的数据或用户交互
      1. 管理按钮的状态(例如,按钮是启用还是禁用)
    • 使用状态管理技术(如 Remember 或 ViewModel)可有效处理这些场景

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

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

相关文章

基于python深度学习遥感影像地物分类与目标识别、分割实践技术

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

JS惰性函数两种实现方式

惰性函数的本质就是函数重写&#xff0c;所谓惰性载入&#xff0c;指函数执行的分支只会发生一次。那什么时函数重写呢&#xff1f;由于一个函数可以返回另一个函数&#xff0c;因此可以用新的函数在覆盖旧的函数。 惰性函数有两种实现方式&#xff1a; 1、在函数被调用时&am…

案例研究丨国控星鲨利用DataEase释放数据潜能,重塑业务视野

国药控股星鲨制药&#xff08;厦门&#xff09;有限公司&#xff08;以下简称为国控星鲨&#xff09;始创于1952年&#xff0c;前身为厦门鱼肝油厂&#xff0c;距今已经有70余年历史&#xff0c;是国家商务部认定的“中华老字号”企业。2011年&#xff0c;国药控股与厦门轻工集…

2024年国庆小长假即将来临,陪猫咪的同时应该如何清浮毛

在父母眼中我们是不是永远都长不大&#xff1f;每次和他们讨论一点事情就开始吵起来。这不&#xff0c;前两天想着和好久不见的朋友去见面&#xff0c;出门前还要被逼问一番。 去到朋友家&#xff0c;发现朋友养了两只可爱的小猫&#xff0c;一时心动上头&#xff0c;我也转身…

通信工程学习:什么是MANO管理编排

MANO&#xff1a;管理编排 MANO&#xff1a;Management and Network Orchestration&#xff08;管理和网络编排&#xff09;在网络功能虚拟化&#xff08;NFV&#xff09;架构中扮演着至关重要的角色。MANO是一个由多个功能实体组合而成的层次&#xff0c;这些功能实体负责管理…

地图定位流程

用户端在小程序认证通过后会自动进行定位&#xff0c;也可以在首页手动定位&#xff0c;定位成功后用户在查询家政服务项目时会根据定位的城市查询该城市有哪些服务项目。 高德地图配置 小程序端的定位是通过手机的定位模块进行定位&#xff0c;定位成功获取经纬度坐标&#x…

吸烟行为检测、重点区域吸烟检测、吸烟检测算法样本标注

吸烟检测算法主要用于公共场所、工作场所和家庭环境中的吸烟行为监控&#xff0c;通过图像识别技术来检测和识别吸烟行为&#xff0c;以确保环境卫生和公共安全。这种技术可以帮助管理者实时监控吸烟行为&#xff0c;及时采取措施&#xff0c;减少二手烟的危害。 一、技术实现…

55 循环神经网络RNN的实现_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录循环神经网络的从零开始实现[**独热编码**]初始化模型参数循环神经网络模型预测[**梯度裁剪**]训练小结练习 循环神经网络的从零开始实现 import math import torch from torch import nn from torch.nn import functional as F from d2l i…

大数据系统调优:从DAG到单机

目标&#xff1a;优化T10的时效性全局DAG调度层优化&#xff1a;提前任务开始时间&#xff1a; 1. 优化慢结点&#xff1a;T10依赖了T4,T7,T8, 其中T8为瓶颈&#xff0c;如果T8能提前点完成&#xff0c;T10可以早点开始&#xff0c;就能早点完成 2. 快结点做更多预计算…

WEB领域是不是黄了还是没黄

进入2024年后&#xff0c;WEB领域大批老表失业&#xff0c;一片哀嚎&#xff0c;个个饿的鬼叫狼嚎&#xff0c;为啥呢&#xff0c;下面是我个人的见解和看法。 中国程序员在应用层的集中 市场需求&#xff1a;中国的互联网行业在过去几年中经历了爆炸性增长&#xff0c;尤其是…

python和pyqt-tools安装位置

一.python的安装位置 1.查询安装的python的位置 先查询python&#xff0c;然后输入import sys和sys.path 二.python-tools的安装位置 找到python的文件后按下图路径即可查到tools的文件

UEFI EDK2框架学习 (一)

01 Shell界面打印 执行qemu指令后 qemu-system-x86_64 -drive ifpflash,formatraw,fileOVMF.fd -nographic -net none出现shell界面 02 在UEFI shell中创建APP 创建SimplestApp文件夹以及SimplestApp.c、SimplestApp.inf cd edk2 mkdir SimplestAppuuidgen // generate …

论文不会写快来看!分享4款ai改写论文软件

在当今学术研究和写作领域&#xff0c;AI论文改写工具已经成为不可或缺的助手。这些工具不仅能够帮助研究人员提高写作效率&#xff0c;还能确保论文的质量和原创性。以下是四款值得推荐的AI改写论文软件&#xff0c;其中特别推荐千笔-AIPassPaper。 千笔-AIPassPaper 传送门&…

【在.net6和WPF框架下进行海康SDK开发】(一)如何引用Dll

最近有个上位机项目&#xff0c;需要将海康VisionMaster的部分功能嵌入到统一的界面。项目使用WPFdotNet6开发&#xff0c;UI库使用HandyControl。 先说下需求&#xff0c;在某个TabItem内嵌入一个UserControl&#xff0c;UserContr内嵌入VisionMaster运行界面。 本以为按照海康…

开关频率与谐振频率对应的模态图

当fsfr时 当fr2<fs<fr1时 当fs>fr1时 开关频率对应输入电压的频率 谐振频率对应的是谐振电流的频率

人工智能之计算机视觉的发展历程与相关技术内容,相应的模型介绍

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能之计算机视觉的发展历程与相关技术内容&#xff0c;相应的模型介绍。本文围绕计算机视觉这一领域&#xff0c;以问答的形式呈现了关键问题及详细解答。内容涵盖计算机视觉的基本概念、技术原理、应用场景等…

Java刷题知识总结(一)

1.局部变量参与运算前是必须要初始化的&#xff0c;比如下面的代码就会编译出错&#xff0c;提示y必须要初始化。 public static void main(String[] args) {int x 1;int y;int z x y; } 2.ArrayList和Vector主要区别是什么&#xff1f; A Vector与ArrayList一样&#xf…

浮动静态路由

浮动静态路由 首先我们知道静态路由的默认优先级是60&#xff0c;然后手动添加一条静态路由优先级为80的路由作为备份路由。当主路由失效的备份路由就会启动。 一、拓扑图 二、基本配置 1.R1: <Huawei>system-view [Huawei]sysname R1 [R1]interface GigabitEthernet…

嵌入式linux方向细分工作岗位分析

大家好,今天主要给大家分享一下,linux方向细分的工作岗位有哪些?,为即将进入linux领域的开发者指明方向。 第一:总结分布 第二:Linux BSP工程师岗位 工作内容: 1、开发和维护Linux系统的板级支持包(BSP),包括启动加载程序、设备驱动、文件系统等。 2、负责解决硬件和软…

企业上云不迷茫,香港电讯助力企业上云全攻略

在全球政策和市场双重驱动下&#xff0c;云计算产业正迎来前所未有的增长浪潮。据中国信通院《云计算白皮书&#xff08;2023年&#xff09;》1显示&#xff0c;2022年全球云计算市场规模已达到4,910亿美元&#xff0c;同比增长率高达百分之十九。而在中国市场&#xff0c;这一…