首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【榨干 Kotlin】把函数当类用,Compose 风骚作用域机制

但是,有一个事实是,Compose 是用函数来写界面的,它每个组件都是一个函数,而不是类: 类和接口要做这种访问性隔离,是很容易。...今天咱聊一下 Compose 作用域机制。「作用域」这个词在 Compose 底层原理角度有它单独含义,它是用来讨论在界面结构组合过程,每个层级之间关系一个关键概念。...Compose Row() 组件内部可以使用一个叫 align() Modifier 函数,它可以设置 Row() 内部每个组件纵向对齐规则,比如纵向居中: 而你如果在 Row() 外面尝试使用它...它可以设置在它父组件——也就是这个 Column()——里横向对齐规则: ——注意,这里虽然函数名一样,但其实是另一个函数,它接受横向对齐类型参数。...讲了讲 Compose 作用域机制,希望可以对大家有帮助,不管是在 Compose 还是 Kotlin 角度。关注我,了解更多开发知识和技能。我是扔物线,我不和你比高低,我助你成长。我们下期见!

12010

写给初学者Jetpack Compose教程,基础控件和布局

Compose一个用于替代Android View全新声明式UI框架。既然是UI框架,因此我们第一篇文章就来讲一讲基础控件和布局方面的知识。...打开Android Studio,创建一个名叫ComposeTest新项目,然后选择Compose Empty Activity,如下图所示: 这样Android Studio就会为我们创建一个拥有...首先看一下onCreate函数代码,这里调用了一个setContent函数。注意这个名字是非常讲究,因为每个Android开发者都会对另外一个函数名字非常熟悉:setContentView。...其实在刚才自动生成Greeting函数里,就已经使用了Text控件,所以我们才能在界面上看到Hello Android字样。...这里我们讲一些常见用法来帮助大家快速入门,更多丰富用法就等待大家自己探索了。

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

compose--初入compose、资源获取、标准控件与布局

首先compose目前支持kotlin,基于google对移动端鸿图,未来应该也不会支持其他语言,和传统安卓xml布局不同,compose是通过kotlin定义一个一个组件,由于是通过代码定义组件...UI操作,重组发生时机并不由我们控制,而是由compose内部自动管理,后续我们可以使用状态来通知compose进行重组 二、创建compose项目 推荐使用最新android studio,低版本并不支持...,实际开发google也推荐:UI设计从MD2转变为MD3 2.BOM 对于compose版本管理,官方推荐使用BOM,导入BOM后好处是:导入compose其他库组,都将使用BOM定义版本...1.3.1,对应kotlin版本是1.7.10,工程build.gradle: android { buildFeatures { compose true }...,一个是value,一个是onValueChange ,结合之前重组概念来理解,每次重组都会重新调用可组合函数,所以输入框内容value必须是一个全局对象,在compose,可以使用remember

5.6K30

Android开发笔记(一百零八)智能语音

对中文来说,和语音播报相关一个技术是汉字转拼音,想想看,拼音本身就是音节拼读标记,每个音节对应一段音频,那么一句拼音便能用一连串音频流合成而来。...该引擎支持英语、法语、德语、意大利语,但不支持中文,幸好Android从4.0开始允许接入第三方语音引擎,因此只要我们安装了中文引擎,就能在代码中使用中文语音合成服务。...第一个参数是要合成文本,第二个参数时要保存音频全路径,第三个参数是SynthesizerListener回调接口。 pauseSpeaking : 暂停朗读。...合成音频格式:支持pcm格式 String text = mResourceText.getText().toString(); // 设置参数 setParam(); int...startSpeaking进行合成, // 正确做法是将onCreatestartSpeaking调用移至这里 } } }; //合成回调监听 private

5K20

安卓开发之布局

(表格布局) android:stretchColumns=”1″  设置第2作为拉伸(注意0表第一) TableLayout添加一个TableRow就可以增加一行,在tablerow添加组件就占用一...如果直接在tableLayout添加组件那么他独自占用一行 设置拉伸stretchColumns、压缩shrinkableColumns、隐藏collapseColumns可以参考上面的拉伸设置...=”true”如果值为true则该控件底部和父控件底部对齐 android:layout_alignParentLeft=”true”  如果该值为true则该控件左边与父控件左边对齐 android...则该控件顶部与父控件顶部对齐 android:layout_centerHorizontal=”true”        如果值为true该控件将置于水平方向中心 android:layout_centerInParent...=”” 如果值为true该控件将置于水平和垂直方向中心 android:layout_centerVertical=””   如果值为true该控件将置于垂直方向中心 四、常见布局属性 android

1.9K70

Compose Text 文本和 AnnotatedString 多种样式文本详解|技术创作特训营第一期

随着团队不断更新,项目组逐渐转到 Jetpack Compose 方式,对于 Compose 绘制 UI 方式在不断熟悉,而开发过程中会遇到很多不同场景,和尚在此记录一下常用 Text...UI 组件,是一个有序、不可变修饰符元素集合,用于装饰或添加 Compose UI 元素行为,常用于设置组件背景、尺寸、各类属性、点击事件等;和尚尝试几种常见 Modifier 使用场景;...baselineShift 用来让所有文字互相对齐基准线,视觉上更舒适; fontSynthesis 用于合成字体,当使用 FontFamily 不包含粗体或斜体时,系统是否应该伪造粗体或斜体;9.3...方式进行创建对应 AnnotatedString 对象;字符串构造方法:只需提供一个字符串作为参数,并使用 append 函数将该字符串添加到 AnnotatedString ;val annotatedString1...;可以在 Text 添加占位等操作;用于在文本添加内联内容,并提供自定义渲染逻辑;内联内容可以是特殊标记或占位符,用于在文本插入自定义组件或视图;val annotatedString4 =

1.5K22

深度解析 Jetpack Compose 布局

Jetpack Compose 是用于构建原生 Android 界面的新工具包。...这相当于 View 系统 onMeasure 和 onLayout。但在 Compose ,这两个阶段会交叉进行,因此我们把它看成一个布局阶段。...对齐线 (Alignment Lines) 我们可以使用对齐线根据布局顶部、底部或中心以外标准来设置对齐。最常用 对齐线 是文本基线。...如下例所示: △ 未设置对齐嵌套布局 △ 通过父节点设置对齐线 您甚至可以在自定义布局创建自己自定义对齐,从而允许其他可组合项对齐到它。...△ 测量过程测量正文尺寸 系统识别出测量了正文,因此它是决定布局尺寸唯一重要子节点,图标和文本仍然需要测量,但可以在放置过程执行。

2K30

Jetpack-Compose 学习笔记(二)—— Compose 布局你学会了么?

在前一篇笔记,我们知道了 Compose 布局一些基本知识,这篇笔记就来详细看看 Compose 布局吧!还有些 Compose 其他知识,根据官方实例,我们边看边说。 1....在 Compose 构建 composition 树,如果需要将顶层 Composable 函数某个变量传递到最底层 Composable 函数,通常最简单有效方法就是:1)定义一个全局变量...List 布局使用 在笔记一,我们见识到了 Compose 使用 LazyColumn 来实现一个可滑动 List,其实实现一个可滑动 List 并不需要用到 LazyColumn,只需要用...,如果声明一个,则可用 createRef() 方法 // 这里声明类似于 View id val (button, text) = createRefs()...4.3 Chain 用法 Chain 链,与 xml 用法一样,就是将一系列子元素按顺序打包成一行或一。官方将这个 api 标记为可以改进状态,可能后续会发生变化。

2.5K31

要再见了吗,Kotlin Android Extension

View 当中 那么这时候我们就要面临一个导包问题,tipsView 和 warningView 访问合成属性可能来自于以下两个包: kotlinx.android.synthetic.main.view_tips.view....* kotlinx.android.synthetic.main.view_warning.view.* 我们当然可以把二者一并导入,但问题在于二者即便如此,合成属性在编译时静态绑定也只能绑定到一个包下面的合成属性下...还有一个就是 compose-jb(https://github.com/JetBrains/compose-jb) 了,我粗略看了下,目前已经把 Compose 移植到了桌面上,支持了 Windows...所以 Compose 已经不再是 Android 了,它是大家。 对于 Compose 而言,KAE 一点儿用都没有,因为人家根本不需要做 View 绑定好不好。 KAE:我这么优秀!...小结 KAE 本质上就是通过编译器生成字节码方式为 Activity、Fragment、View 提供了以 xml 布局 id 为名合成属性,从而简化使用 findViewById 来实现 View

1.6K40

Android开发笔记(三十八)列表类视图

spinnerMode只能在xml设置,不能在代码设置。 代码方法: setPrompt : 设置标题文字。 setPromptId : 设置标题视图资源ID。...源码适配器类型是SpinnerAdapter,但该类用起来很麻烦,所以实际中用一般是ArrayAdapter,ArrayAdapter可以直接传入一个字符串数组。...textAlignment : 指定文本对齐方式,常见取值说明如下:inherit表示继承上级视图对齐方式,center表示文本居中对齐,textStart表示文本开头对齐,textEnd表示文本末尾对齐...,viewStart表示视图开头对齐,viewEnd表示视图末尾对齐。...两种使用方式区别如下: 1、ListActivity方式视图id被设置为系统id,不方便在代码修改该列表视图属性; 2、ListActivity方式实现点击方法、未实现长按方法,不方便响应列表项长按事件

2.3K20

写给初学者Jetpack Compose教程,Modifier

重组其实就是根据当前Compose代码结构,将一层一层Composable函数组合成界面的过程。 在Compose内部,是用树型结构来存储一次重组过程每个Composable函数节点。...在Android开发者官网有这样一个例子,比如你使用底层API自行绘制了一个日历界面,如下图所示: 那么当用户选中了17号这天时候,系统不会发音你选中了17号,而是可能最多只会发音你选中了日历。...ComposeBox基本就相当于ViewFrameLayout,它们默认是不能影响用户点击或其他输入事件。...注意这两个事件不能在一个pointerInput()函数监听,因为detectTapGestures和detectDragGestures函数都是阻塞性,调用了之后下面的一行代码就永远不会执行到了...比如说我们正在给一个纵向LinearLayout指定它子元素对齐方式,由于这是一个纵向LinearLayout,因此它子元素必然只能在水平方向上对齐

42430

Android六大布局

,简单直接就可以定位,但是手机屏幕不一样大,适配性差; 可以直接用Android:layout_x和android:layout_y来定义组件位置(两个属性只能在绝对布局中使用,在相对布局中都不会显示...shrinkColumns 为设置被收缩序号,收缩是用于在一行太多或者某内容文本过长,会导致某内容会被挤出屏幕,这个属性是可以帮助某内容进行收缩,用于防止被挤出。...内部属性值相同 不同处: gravity是设置自身子元素对齐方式。比如一个TextView,则是设置内部文字对齐方式。...比如,一个TextView设置layout_gravity属性,则表示这TextView相对于父容器对齐方式。...R.java 文件

2.5K20

HarmonyOS学习路之开发篇—Java UI框架(六大布局开发)

一、布局介绍 Android布局开发存在五大布局,在鸿蒙布局开发也存在与之相似的五种布局类型,唯一多余一个类型叫做自适应盒子布局,布局可以在不同设备上有不同展示方式。...熟悉Android开发小伙伴可以参照Android布局开发来学习。...="$id:component_id" above 将下边缘与另一个子组件上边缘对齐 ohos:above="$id:component_id" below 将上边缘与另一个子组件下边缘对齐 ohos...,添加到这个布局视图都是以层叠方式显示,而它会把这些视图默认放到这块区域左上角,第一个添加到布局视图显示在最底层,最后一个被放在最顶层。...该布局每个盒子宽度固定为布局总宽度除以自适应得到数,高度为match_content,每一行所有盒子按高度最高进行对齐

1.4K10

二维布局:Grid Layout

基础和浏览器兼容性 开始你要用 display:grid 定义一个网格容器,用 grid-template-columes 和 grid-template-rows 设置和行尺寸,然后将子元素放在表格和行...值: strat - 与单元格起始边缘对奇 end - 与单元格结束边缘对齐 center - 与单元中心对齐 stretch - 拉伸使其充满整个单元格(默认值) .container {...此属性沿着内联(行)轴对齐网格(而不是沿着块()轴对齐网格对齐内容)。...值: start - 将网格对齐在网格容器上起始边缘线 end - 将网格对齐在网格容器下边缘线 center - 将网格对齐在网格容器中心 stretch - 讲网格拉伸充满整个网格容器 space-around...值: start - 将网格项对齐以与单元格起始边缘齐平 end - 将网格项对齐以与单元格结束边缘齐平 center - 对齐单元格中心网格项 stretch - 填充整个单元格宽度 .item

4.3K20

Android 应用开发】AndroidUI设计之 布局管理器 - 详细解析布局实现

线性布局组件不会自动换行, 如果组件一个一个排列到尽头之后, 剩下组件就不会显示出来; 2....帧布局FrameLayout 帧布局容器为每个组件创建一个空白区域, 一个区域成为一帧, 这些帧会根据FrameLayout定义gravity属性自动对齐; 1....TableRow增加行列 : 向TableLayout添加一个TableRow,一个TableRow就是一个表格行, 同时TableRow也是容器, 可以向其中添加子元素, 每添加一个组件, 就增加了一...组件增加行 : 如果直接向TableLayout添加组件, 就相当于直接添加了一行; 宽 : TableLayout, 宽度由该最宽单元格决定, 整个表格宽度默认充满父容器本身; 2....设置横跨四 : 设置TextView和按钮横跨四android:layout_columnSpan 为4, 合并 就是占了一行; textView一些设置:  设置textView文本与边框有

2.3K40

Android Studio Arctic Fox (2020.3.1) Beta 版发布

我们将按字母顺序安排代号,第一个便是 Arctic Fox,它现在处于 Beta 版;下一个代号是 Bumblebee,现在则还在 Canary 渠道。...请向我们提交反馈,帮助我们在下一个版本 Android Studio 中继续聚焦您最关心领域。...通过使用 @Preview 注释,Compose Preview 可以在不同配置 (即主题、设备) 下一次可视化多个组件,并为您创建一个心理地图来导航您代码。...它通过确保每个模块包含对其自身资源引用,而不从依赖关系中提取引用来防止资源重复。...由于这是一个针对 arm64 架构预览版,您需要在 Android Studio 下载存档页 寻找 Mac (Apple Silicon) 并单独下载该版本。

27420
领券