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

Android Compose开发

声明式 UI,通过对比可以看到 Kotin DSL 有诸多好处: 有着近似 XML 结构化表现力 较少字符串,更多强类型,更安全 可提取 linearLayoutParams 这样对象方便复用...另外 Compose 里代码基本都是可以被混淆,所以开启混淆之后代码压缩率也很高。 手动操纵视图会提高出错可能性。如果一条数据在多个位置呈现,很容易忘记更新显示某个视图。...允许您在应用程序中创建水平滑动页面布局,类似于 ViewPager 或 RecyclerView。...控制了视图在屏幕上显示顺序。具有较高 zIndex 值视图将显示在具有较低 zIndex 值视图之上。 默认情况下,视图 zIndex 值为0。...副作用操作通常包括异步任务、网络请求、数据库操作或其他可能会阻塞主线程操作。 LaunchedEffect 函数是一个协程构建器,接受一个或多个参数,并在代码块中执行异步操作。

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

线程与更新UI,细谈原理

(DOM是一种文档对象模型,他层次结构是除了顶级元素,所有元素都被包括到另外元素节点中,有点像家谱树结构,很典型就是html代码解析) 到这里,一个有完整view结构DecorView就创建出来了...."); } } 可以看到是因为当前线程currentThread不是mThread时候,就会崩溃,报错误是 “只有创建视图层次结构原始线程才能触摸视图” ,看到这里是不是猜到一些了...,这个mThread难道就是“创建视图原始线程”?...翻译还是比较准确只有创建视图原始线程才能修改这个视图,听起来也蛮有道理,我创造了你才有权利改变你,有那味了。...setText方法中调用了TextViewsetText()方法,然后由于Toast中TextView宽高都是wrap_content,所以会触发requestLayout方法,最后会调用到最上层

79020

Android使用ViewBinding

前言 原始方式 在我们开发过程中,需要获取XML布局文件中ViewId,以便其赋值显示,我们习惯使用findViewById进行操作,可这样会导致很多模版代码出现。...ViewBinding和Kotlin扩展 ViewBinding 和 Kotlin 扩展 都是 Android 开发中常用技术,用于简化视图查找和绑定过程。...ViewBinding 可以生成类型安全代码,避免了手动查找和强制转换视图对象麻烦。 ViewBinding 不会增加 APK 大小,因为只是编译时生成代码。...Kotlin扩展 使用起来相对简单,可以直接在布局文件中使用 Kotlin 扩展函数来查找和操作视图。...Kotlin扩展 对视图数据获取和类型安全性没有提供直接支持,需要手动处理可能空指针异常和类型转换。 Kotlin扩展 会增加 APK 大小,因为它是在运行时动态添加函数。

39621

Kotlin学习日志(六)控件使用

1.1 按钮Button Button是Android常用控件之一,我在前面的文章就提到过Button Kotlin学习日志(一)TextView、Button、Toast使用 我们看一下使用代码...只不过由于多数情况用不到视图对象,因此在Kotlin中把冗余视图入参给省略了,但是为了弄清楚按钮事件来龙去脉,还是有必要观察一下本来面貌,接下来依次介绍按钮事件三种Kotlin编码方式:匿名函数...此时函数体代码中还有两个值得注意地方: (1)因为视图View是基本视图类型,并不存在文本属性,所以需要把这个视图对象变量类型转换为按钮Button,然后才能得到按钮对象文本,Kotlin类型转换通过关键字...单选按钮RadioButton默认是未选中状态,点击则显示选中状态,但是再次点击并不会取消选择,只有点击同组其他单选按钮,原来选中单选按钮才会被取消选中。...通过setInputType方法,可以过滤合法输入字符,只有符合输入类型字符,才允许接收并显示出来,而Kotlin可以直接给inputType属性设置输入类型,从而取代setInputType方法调用

1.7K30

实战 | 认识 RecyclerView

虽然 RecyclerView 组成结构乍一看有些复杂,但是深入理解以后您会发现其实非常简单明了。 本文会通过创建一个简单 RecyclerView 实现一个列表来显示不同种类名字。...RecyclerView 是一个容器,它用于显示列表形式 (list) 或者网格形式 (grid) 数据,比如文本或者照片。 当列表滑动时候,实际上只有少量邻近视图会显示在屏幕上。...当视图滑出屏幕时,RecyclerView 会复用它并且填充新数据。由于它是通过回收已有的结构而不是持续创建列表项,所以它可以有效提高应用时间效率和空间效率。...首先在 Android Studio 里创建一个工程,并且使用 Empty Activity 模板。设置项目名称,并且选择 Kotlin 作为项目所用语言。...在 ViewHolder 中,创建一个变量来引用 TextView,然后将它指向表项布局里对应视图

1.1K30

《Kotin 极简教程》第13章 使用 Kotlin 和 Anko Android 开发

Anko是一个 Kotlin 库, 使 android 应用程序开发变得更快、更容易。使您代码更加简单干净, 易于阅读。...那么要如何才能Kotlin环境中使用ButterKnife呢? 在早些时候,ButterKnife作者已经帮我们想好解决方案了,那就是——KotterKnife,见名知意。...,我们视图注入代码如下 val todoTitle: TextView by bindView(R.id.todo_item_todo_title) val todoContent: TextView...在 verticalLayout 代码段内部,创建了三个Android控件 - 两个 editText 视图和一个 button 视图。这里视图属性都在一行里面设置好了。...这些 ids 需要手工在一个加做 ids.xml 文件里创建,这个文件放在 app/src/main/res/values/ids.xml。如果这个文件不存在就创建。文件内容如下: <?

3.5K30

Android性能优化(二)之布局优化面面观

作为开发人员,我们目标只有一个:保证稳定帧率来避免卡顿。...四、减少嵌套层次及控件个数 Android布局文件加载是LayoutInflater利用pull解析方式来解析,然后根据节点名通过反射方式创建出View对象实例; 同时嵌套子View位置受父View...,但是明显只使用TextView来做:嵌套层次、控件个数都更少。...Android定义了ViewStub类,ViewStub是轻量级且不可见视图没有大小,没有绘制功能,也不参与measure和layout,资源消耗非常低。...八、总结 布局优化通用套路 调试GPU过度绘制,将Overdraw降低到合理范围内; 减少嵌套层次及控件个数,保持view树形结构尽量扁平(使用Hierarchy Viewer可以方便查看),同时移除所有不需要渲染

86930

常用Android布局文件优化技巧总结

Android 布局加载是 Android 应用程序重要组成部分。布局加载是指将 XML 文件中定义视图层次结构加载到内存中。...这些属性可以用来控制视图元素在布局中位置和大小。 布局文件解析过程 当应用程序启动时,Android 系统会将布局文件解析成一个视图层次结构,然后将其加载到内存中。...逐行解析 XML 文件,创建相应视图对象,并设置视图对象属性。 将所有视图对象组织成一个视图层次结构。 在解析布局文件时,Android 系统会使用反射机制来动态地创建视图对象。...merge 标签可以将多个视图容器合并成一个视图容器,从而减少视图层次结构深度和内存占用率。.../> 使用 merge 标签可以将线性布局和文本视图合并为一个布局容器,从而减少视图层次结构深度和内存占用率。

20020

android学习笔记----定时问题

和控件操作都不是线程安全,所以Android才会禁止在非UI线程更新UI,对于显式非法操作,比如说直接在Activity里创建线程,然后直接在子线程中操作UI等,Android会直接异常退出,并提示...its views便是一个例子,字面意思是只有创建视图层次结构原始线程才能操作View,明显是线程安全相关。...s.说明在错误线程更新UI。 总结点: 不能在主线程(UI线程)进行耗时操作,比如连接网络,拷贝大数据,睡眠等操作。 比如连接谷歌网络。...在4.0之后谷歌强制要求连接网络不能在主线程进行访问 只有线程(UI线程)才可以更新UI 定时代码如下 MainActivity .java import android.os.Bundle; import...// 一旦计时器被终止,执行线程就会顺利地终止,并且不会再安排任务了。

22410

【Android从零单排系列三十四】《Android布局介绍——ConstraintLayout》

它可以帮助开发者在用户界面上创建复杂布局,并提供了精确控制视图之间关系和位置能力。...这意味着你可以根据需要自由调整视图位置,并确保在不同屏幕尺寸或设备方向下正确布局。 性能优化:ConstraintLayout针对性能进行了优化,可以减少布局层次以及视图嵌套。...TextView 1被设置为位于父容器顶部,并与父容器左右边缘对齐。同时,底部边缘与TextView 2顶部边缘对齐。...TextView 2位于TextView 1底部,并与父容器左右边缘对齐。同时,底部边缘与Button顶部边缘对齐。 Button位于TextView 2底部,并与父容器左右边缘对齐。...同时,底部边缘与父容器底部边缘对齐。 通过这样约束条件,我们可以实现一种垂直排列布局,其中TextView 1位于顶部,TextView 2位于其下方,Button位于最底部。

32820

Kotlin入门(23)适配器进阶表达

随着用户下拉或者上拉手势,已经被回收列表项要重新加载到界面上,倘若每次加载都得从头创建视图对象,势必增加了系统资源开销。...根据这种设计思路,提取出了循环视图基础适配器,Kotlin代码如下所示: //循环视图基础适配器 abstract class RecyclerBaseAdapter<VH : RecyclerView.ViewHolder...下面便是个循环视图网格适配器,实现了类似淘宝主页网格频道栏目,具体Kotlin代码如下所示: //把公共属性和公共方法剥离到基类RecyclerBaseAdapter, //此处仅需实现getItemCount...对于第一个布局编码,可以考虑将其作为一个整型输入参数;对于第二个数据结构,可以考虑定义一个模板类,在外部调用时再指定具体数据类;对于第三个bind方法,若是Java编码早已束手无策,现用Kotlin...尤其是最后两种实现方式,分别运用了Kotlin多项综合技术,才能Kotlin精妙语法之大成。 点此查看Kotlin入门教程完整目录

1.8K41

Android Studio 3.6中使用视图绑定替代 findViewById方法

所以如果您在布局中放入了一个 TextView视图绑定就会暴露一个 TextView 类型属性给您。...在 ActivityAwesomeBinding.java 中,视图绑定生成了一个只有一个参数 inflate 方法,该方法通过将 parent 设定为空值来指定当前视图不会绑定到父视图中;视图绑定也暴露了一个有三个参数...bind 方法简化版本 bind 是绑定对象中最复杂一个方法,通过调用 findViewById 来绑定每个视图。...在使用引入布局时候,视图绑定会创建一个被引入布局绑定对象引用。注意 <include 标签有一个 id: android:id=”@+id/includes”。...这里逻辑跟使用普通视图一样, <include 标签也需要有一个 id 才能在绑定对象中生成对应属性。 include 标签必须有一个 id,才能生成对应属性。

2.4K31

使用视图绑定替代 findViewById

所以如果您在布局中放入了一个 TextView视图绑定就会暴露一个 TextView 类型属性给您。...在 ActivityAwesomeBinding.java 中,视图绑定生成了一个只有一个参数 inflate 方法,该方法通过将 parent 设定为空值来指定当前视图不会绑定到父视图中;视图绑定也暴露了一个有三个参数...bind 方法简化版本 bind 是绑定对象中最复杂一个方法,通过调用 findViewById 来绑定每个视图。...在使用引入布局时候,视图绑定会创建一个被引入布局绑定对象引用。注意 include>标签有一个 id: android:id="@+id/includes"。...这里逻辑跟使用普通视图一样, include 标签也需要有一个 id 才能在绑定对象中生成对应属性。 include 标签必须有一个 id,才能生成对应属性。

1.6K30

Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件

viewgroup.png Android为我们提供了View和ViewGroup两个子类集合,提供常用一些输入控件(比如按钮,图片和文本域等)和各种各样布局模式(比如线程布局,相对布局,绝对布局...用户界面布局 在你APP软件上,用户界面上显示每一个组件都是使用层次结构View和ViewGroup对象来构成,比如,每个ViewGroup都是不可见容器,每个ViewGroup视图组用于组织子视图...View容器,而视图View可能是输入一些控件或者在某块区域小部件UI。...如果你有了层次结构树,你可以根据自己需要,设计出一些布局,但要尽量简单,因为越简单层次结构最适合性能。 要声明布局,可以在代码中实例化对象并构建,最简单方法也可以使用xml文件。 <?...,用来显示相对位置视图类,在默认情况下,所有子视图对会分布在左上角。

1.7K20

在 View 上使用挂起函数

其实协程不仅在处理跨线程问题有优势,还可以用来处理同一线程异步问题。 我认为有一个地方可以真正从中受益,那就是在 Android 视图系统中使用协程。...挂起函数 (Suspending functions) 是协程基础组成部分,允许我们以非阻塞方式编写代码。...这种特性非常适用于我们处理 Android UI,因为我们不想阻塞主线程,阻塞主线程会带来性能上问题,比如: jank。...等待 View 被布局完成 让我们看一个例子,封装了一个等待 View 传递下一次布局事件任务 (比如说,我们改变了一个 TextView内容,需要等待布局事件完成后才能获取该控件新尺寸):...对于刚接触代码的人来说, await 方法要比看似会断开回调更具可读性。 最后 希望通过本文,您可以进一步思考协程还可以在哪些其他 API 中发挥作用。

2.3K30

【Android】Android对于Activity运用以及ViewGroup和 用户界面组件在项目中运用

PhoneWindow是Window子类。在这个PhoneWindow中,有一个DecorView内部类,它是所有应用程序窗口视图,直接控制是否显示活动(参考旧驱动程序原始单词…)。...然后,可以为这些对象定义一些其他行为,查询对象状态,或修改布局。有关创建UI布局完整指南,请参阅XML布局 用户界面组件 不需要使用所有View和ViewGroup对象创建UI布局。...android:text="I am a Button" /> APP用户界面上每个组件都由View和ViewGroup对象层次结构组成,如图1所示。...每个ViewGroup都是用于组织子视图不可见容器。其子视图可以是在UI上绘制区域输入控件或小部件。...ViewGroup:View类子类,可以有子控件,可以视为容器。Android UI中控件按照这种分层树结构堆叠。有两种方法可以创建UI布局。

65620
领券