Andorid 学习 Compose UI(1):Box

今天学习和实验一下Android 的compose UI,写一些很小的Demo实验。下面和css 布局有点相似性。
如Box 看起来像html 当中的 div ,compose UI 提供Modifier 很多设置。你会发现Text,Box,Row,Image等组件 都有这个属性。我们处理任务包括对齐布局,颜色处理,背景添加,圆角处理,渐变色,点击交互。

1.如建立一个Box,实现对齐

package com.example.bleui.viewimport androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp@Preview
@Composable
fun AboutScreen() {Box(modifier = Modifier.fillMaxSize().background(color = Color.White)){Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Blue).align(Alignment.BottomStart))Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Red).align(Alignment.BottomEnd))}
}

尽量简单一点。这个新建一个填充的Box,背景白色,在它内部新建2个box 然后在底部进行对齐。 .align(Alignment.BottomEnd) 这个地方是底部对齐靠右边。 .align(Alignment.BottomStart) 是底部靠左边。出来的效果如下图
在这里插入图片描述

2.实现左右对齐布局 Row

在内部添加一个Row 实现左右对齐。这种和css space-between 十分相似。

package com.example.bleui.viewimport androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp@Preview
@Composable
fun AboutScreen() {Box(modifier = Modifier.fillMaxSize().background(color = Color.White)){Row (horizontalArrangement = Arrangement.SpaceBetween,modifier = Modifier.fillMaxWidth().border(1.dp, color = Color.Red)){Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Yellow))Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Green))}Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Blue).align(Alignment.BottomStart))Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Red).align(Alignment.BottomEnd))}
}

在这里插入图片描述

3.使用实现左右对齐布局 Box

package com.example.bleui.viewimport androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp@Preview
@Composable
fun AboutScreen() {Box(modifier = Modifier.fillMaxSize().background(color = Color.White)){Row (horizontalArrangement = Arrangement.SpaceBetween,modifier = Modifier.fillMaxWidth().border(1.dp, color = Color.Red)){Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Yellow))Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Green))}Box (modifier = Modifier.fillMaxWidth().border(1.dp, color = Color.Blue).padding(top = 100.dp)){Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Yellow).align(Alignment.TopStart))Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Green).align(Alignment.TopEnd))}Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Blue).align(Alignment.BottomStart))Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Red).align(Alignment.BottomEnd))}
}

在这里插入图片描述

出来的效果更加像绝对定位一样。左右两边布局可以通过Row 结合对齐SpaceBetween方式,或者Box 的对齐实现两边对齐的效果。

        Box (modifier = Modifier.fillMaxWidth().offset(x = 0.dp, y = 200.dp).border(1.dp, color = Color.Blue)){Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Yellow).align(Alignment.TopStart))Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Green).align(Alignment.TopEnd))}

其中使用box 当中offsex 更像移动对应位置一下,像固定一样坐标移动。

  Box (modifier = Modifier.fillMaxWidth().offset(x = 0.dp, y = 200.dp).border(1.dp, color = Color.Blue)

使用Modifier设置的时候,有时候会有先后情况,如果将border 提前,放offset在后,绘制出来效果就不一样。这一点在实验过程会感觉到差别。

4. Box 里面添加文本

box 里面可以放置文本 会用到很多。

        Box (modifier = Modifier.fillMaxWidth().offset(x = 0.dp, y = 200.dp).border(1.dp, color = Color.Blue)){Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Yellow).align(Alignment.TopStart)){Text("A100")}Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Green).align(Alignment.TopEnd)){Text("B100")}}

在这里插入图片描述

4.1 Box 里面的文本居中

尝试让文本居中 Modifier.align(Alignment.Center) 只要使用对齐方式进行对齐。Center 是水平和垂直居中。

        Box (modifier = Modifier.fillMaxWidth().offset(x = 0.dp, y = 200.dp).border(1.dp, color = Color.Blue)){Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Yellow).align(Alignment.TopStart)){Text("A100", modifier =Modifier.align(Alignment.Center))}Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Green).align(Alignment.TopEnd)){Text("B100", modifier =Modifier.align(Alignment.Center))}}

由此可见,Alignment的方式可以方便对齐里面元素。
在这里插入图片描述

5. Box 里面添加点击交互

如果我们希望给Box添加交互点击,使用Modifier提供的clickable 实现点击出来。

        Box (modifier = Modifier.fillMaxWidth().offset(x = 0.dp, y = 200.dp).border(1.dp, color = Color.Blue).clickable {println("click me")})

在这里插入图片描述

6. Box 里面添加背景

日常当中希望可以添加背景元素。Box可以实现对应背景添加。使用Image引用对应的位图实现。在Box 里面第一个元素实现对应背景添加。

       Box (modifier = Modifier.fillMaxWidth().offset(x = 0.dp, y = 200.dp).border(1.dp, color = Color.Blue).clickable {println("click me")}){Image(painter = painterResource(id = R.mipmap.login_bg_1),  // 替换为你的图片资源contentDescription = null,contentScale = ContentScale.Crop,modifier = Modifier.fillMaxWidth().height(100.dp))Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Yellow).align(Alignment.TopStart)){Text("A100", modifier =Modifier.align(Alignment.Center))}Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Green).align(Alignment.TopEnd)){Text("B100", modifier =Modifier.align(Alignment.Center))}}

在这里插入图片描述

7. Box的圆角处理

圆角处理是日常当中用得比较频繁。使用背景当中一个属性RoundedCornerShape 添加后背景就可以实现圆角效果。

            Box(modifier = Modifier.width(100.dp).height(100.dp).background(color = Color.Yellow,shape = RoundedCornerShape(24.dp)).align(Alignment.TopStart)){Text("A100", modifier =Modifier.align(Alignment.Center))}

在这里插入图片描述

8. Box的渐变色

使用background 当中linearGradient 处理

            Box(modifier = Modifier.width(100.dp).height(100.dp).background(brush = Brush.linearGradient(colors = listOf(Color.Blue, Color.Red),start = Offset.Zero,end =  Offset.Infinite)).align(Alignment.TopEnd)){Text("B100", modifier =Modifier.align(Alignment.Center))}

在这里插入图片描述

8. Box的渐变+圆角

使用clip 里面shape 属性,可以实现圆角效果。

            Box(modifier = Modifier.width(100.dp).height(100.dp).clip(shape = RoundedCornerShape(24.dp)).background(brush = Brush.linearGradient(colors = listOf(Color.Blue, Color.Red),start = Offset.Zero,end =  Offset.Infinite)).align(Alignment.TopEnd)){Text("B100", modifier =Modifier.align(Alignment.Center))}

在这里插入图片描述

Box 当中用到对齐,背景,颜色,渐变,描边,交互,都提供了对应处理。可以集中在Modifier 进行添加使用。今天的实验到此为止。

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

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

相关文章

Selenium实战案例1:论文pdf自动下载

在上一篇文章中,我们介绍了Selenium的基础用法和一些常见技巧。今天,我们将通过中国科学:信息科学网站内当前目录论文下载这一实战案例来进一步展示Selenium的web自动化流程。 目录 中国科学:信息科学当期目录论文下载 1.网页内…

《炒股养家心法.pdf》 kimi总结

《炒股养家心法.pdf》这篇文章详细阐述了一位超级游资炒股养家的心得与技巧,展示了其从40万到10亿的股市传奇。以下是文章中炒股技巧和心得的详细总结: 1.核心理念 市场情绪的理解:炒股养家强调,股市的本质是群体博弈&#xff0c…

2025年华为手机解锁BL的方法

注:本文是我用老机型测试的,新机型可能不适用 背景 华为官方已经在2018年关闭了申请BL解锁码的通道,所以华为手机已经无法通过官方获取解锁码。最近翻出了一部家里的老手机华为畅玩5X,想着能不能刷个系统玩玩,但是卡…

Perfectly Clear WorkBench深度解析:专业图像处理软件的高效应用

在图像处理领域,面对照片曝光不足、色彩失真、细节模糊等常见问题,一款专业且高效的图像处理软件显得尤为重要。今天,本文将为大家详细介绍Perfectly Clear WorkBench这款图像处理软件,帮助大家更好地了解并应用其功能,提升照片质量。 一、智能图像校正,解决常见问题 Pe…

使用 DistilBERT 进行资源高效的自然语言处理

DistilBERT 是 BERT 的一个更小、更快的版本,在减少资源消耗的同时仍能保持良好性能。对于计算能力和内存受限的环境来说,它是一个理想的选择。 在自然语言处理(NLP)中,像 BERT 这样的模型提供了高精度和出色的性能。然…

【后端基础】布隆过滤器原理

文章目录 一、Bloom Filter(布隆过滤器)概述1. Bloom Filter 的特点2. Bloom Filter 的工作原理 二、示例1. 添加与查询2. 假阳性 三、Bloom Filter 的操作1、假阳性概率2、空间效率3、哈希函数的选择 四、应用 Bloom Filter 是一种非常高效的概率型数据…

Pytorch实现论文之三元DCGAN生成RGB图像用于红外图像着色生成

简介 简介:采用了三次DCGAN单独生成单通道图像之后进行组成RGB图像放入鉴别器中检测,并在鉴别器和生成器的损失训练中采用梯度方法来提升或者降低权重。该方法将用于获得红外图像着色的生成。 论文题目:Infrared Image Colorization based on a Triplet DCGAN Architectur…

Qt中QDockWidget的使用方式

在PyQt5中使用QDockWidget可以创建灵活的停靠窗口,增强应用程序的多功能性。以下是详细的步骤和示例代码: 基本步骤 导入模块:确保导入必要的PyQt5模块。创建主窗口:继承QMainWindow并初始化界面。设置中心部件:例如…

docker独立部署milvus向量数据库

milvus镜像:国外封锁,国内源也不好用。基本上所有源都不能用 首先想到阿里云服务,但是阿里云国外服务器便宜的300~400呢。 基于成本考虑终于装上心心念念的milvus(*^▽^*) 安装 Milvus 安装 Milvus 独立版 wget https://raw.githubuserco…

【SpringBoot整合系列】HttpClient远程访问的示例

前言 使用Apache的HttpClient库,添加Apache HttpClient的依赖。工具类的封装。通常,工具类需要处理GET、POST请求,可能还有其他方法如PUT、DELETE。需要设计一个工具类,提供静态方法,可以发送请求,并处理响…

Git操作整体流程

文章目录 1.Git创建个人仓库2、Git全局配置3、Git本地管理4. Git本地管理常用命令汇总5、使用Git命令将项目提交到远程码云管理6.使用IDEA进行管理7、Idea里面的终端8、关于提交总结 1.Git创建个人仓库 打开https://gitee.com/,登录个人账号,右上角加号…

MySQL MHA 部署全攻略:从零搭建高可用数据库架构

文章目录 1.MHA介绍2.MHA组件介绍3.集群规划4.服务器初始化5.MySQL集群部署5.1 安装MySQL集群5.2 配置一主两从5.3 测试MySQL主从5.4 赋予MHA用户连接权限 6.安装MHA环境6.1 安装MHA Node6.2 安装MHA Manager 7.配置MHA环境8.MySQL MHA高可用集群测试8.1 通过VIP连接MySQL8.2模…

如何查看java的字节码文件?javap?能用IDEA吗?

编译指令: javac YourProject.java 查看字节码文件的指令: javap -c -l YourProject.class 不添加-c指令就不会显示字节码文件: 不添加 -l 就不会显示源代码和字节码文件的对应关系: 添加-l之后多出来这些: IDEA不太…

1、Window Android 13模拟器 将编译的映像文件导入Android Studio

1、环境准备 编译环境:Ubuntu-18.04.5编译版本:android13-release下载地址:清华大学开源软件镜像站AOSP # 下载repo # 同步代码:repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android13-r…

JUC并发—9.并发安全集合三

大纲 1.并发安全的数组列表CopyOnWriteArrayList 2.并发安全的链表队列ConcurrentLinkedQueue 3.并发编程中的阻塞队列概述 4.JUC的各种阻塞队列介绍 5.LinkedBlockingQueue的具体实现原理 6.基于两个队列实现的集群同步机制 1.并发安全的数组列表CopyOnWriteArrayList …

报错:Cannot read properties of null (reading ‘ce‘)解决方法

背景 工作项目中要做右键菜单打开趋势图弹窗的需求,这个弹窗使用了vue-resizable的第三方插件,这个插件的主要作用是把弹窗设置为可拖拽的效果。这个用vue-resizable做的弹窗已经做好了,在别的项目中能够正常的运行。但是我把它拿过来放在新…

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_process_options

ngx_process_options 声明在 src\core\nginx.c static ngx_int_t ngx_process_options(ngx_cycle_t *cycle); 定义在 src\core\nginx.c static ngx_int_t ngx_process_options(ngx_cycle_t *cycle) {u_char *p;size_t len;if (ngx_prefix) {len ngx_strlen(ngx_prefix);p …

数据结构系列二:包装类+泛型

包装类泛型 一、包装类(1)基本数据类型和对应的包装类(2)装箱和拆箱 二、泛型(1)什么是泛型(2)引出泛型(3)语法(4)泛型类的使用1.语法…

量子计算驱动的金融衍生品定价革命:突破传统蒙特卡洛模拟的性能边界

引言:金融计算的算力困局 某国际投行采用128量子位处理器对亚洲期权组合定价时,其量子振幅估计算法在2.7秒内完成传统GPU集群需要68小时的计算任务。在蒙特卡洛路径模拟实验中,量子随机游走算法将10,000维衍生品的价格收敛速度提升4个数量级…

Spring容器初始化扩展点:ApplicationContextInitializer

目录 一、什么是ApplicationContextInitializer? 1、核心作用2、适用场景 二、ApplicationContextInitializer的使用方式 1、实现ApplicationContextInitializer接口2、注册初始化器 三、ApplicationContextInitializer的执行时机四、实际应用案例 1、动态设置环境…