登录社区云,与社区用户共同成长
邀请您加入社区
Jetpack Compose的日期时间选择器【样式可自定义,核心代码是滑轮以及年月日边界处理】
解决Jetpack Compose中TextField无法设置内边距的问题
Android Jetpack Compose - enableEdgeToEdge 函数、MaterialTheme 函数、remember 函数
记录一些常用的compose布局用的容器的基本用法
val publishedAt: Long // 时间戳(毫秒)使用 标记为 Room 表;@Entityid自增主键;其他字段根据简单新闻结构设计。步骤 3:本地数据库 Room3.1 Dao 接口@Dao// 观察所有文章(按时间倒序)// 清空表// 批量插入(冲突时替换)本文完整演示了一个真实且可运行基本架构设计(MVVM + Repository);数据层实现(Room + Retrof
在 Jetpack Compose Glance 1.1.0 中,官方小组件的 Glance Text 不支持自定义字体,仅支持默认的 Serif、SansSerif、Monospace 和 Cursive 字体。要实现自定义字体,可以通过将文本渲染为 Bitmap 的方式来实现。具体步骤包括:使用 Paint 类设置字体、颜色和大小,然后通过 Canvas 将文本绘制到 Bitmap 上。最后,
GitMob是一款纯打造的现代化 Android GitHub 客户端。它提供了深度的仓库管理体验,旨在让你在手机上也能高效处理开发任务。💡 AI 驱动开发:本项目完全由 AI(Claude)指导生成。
Android Jetpack Compose - TopAppBar、BottomAppBar、Scaffold
/这里获取传参过来数据//可以传入SettingPage中,然后在页面中使用数据,这里我就没写了这里上面,可以看到加了个{id}(有点类似Spring Boot里的接口写法),就是标明需要传参的意思这里实际上还可以声明类型,默认不写的话,就是说**id是String类型的**arguments这个变量实际上就是我们Intent中常用的Bundle,所以获取数值的是调用了getString()方法。
png, svg转矢量图,webp到底用什么格式的图片呢?在Android开发中选择图片资源格式(PNG、SVG、WebP)需综合考虑。
本文为Android开发者详细解析如何将本地项目上传至GitHub,并结合Android Studio的图形化工具实现高效的Git操作。首先,通过GitHub创建仓库、初始化本地Git、关联远程仓库、提交并推送代码,完成项目的云端托管,确保代码的安全性与团队协作便捷性。其次,重点介绍Android Studio内置的Git功能,包括仓库初始化、克隆远程项目、提交与推送更改、拉取远程更新、分支管理及
本文探讨了Compose Navigation从字符串路由到类型安全的进化之路。最新版本通过Kotlin序列化实现了对象驱动的路由定义,告别了易错的字符串拼接方式。文章展示了如何利用data class定义类型安全路由,实现导航逻辑与UI的深度解耦,并介绍了与Hilt、ViewModel的集成方案。此外还覆盖了深层链接和动画等复杂场景的处理方法。这种类型安全的导航方式不仅能在编译期发现错误,还能保
实现如图所示仿电池样式的进度条。
2. 基础组件:Text, Button, Column, Row3. 状态管理:remember, mutableStateOf4. 事件处理:点击、输入综合练习:计数器App。
Jetpack Core-Animation不是一个直接面向 UI 的动画 API(如 Compose Animation 或 ObjectAnimator),它是一个现代化的、基于 Kotlin 的底层动画引擎,可以将其理解为一个强大的“动画发动机”。我们有理由相信,随着库的成熟,它将成为 Compose 动画乃至整个 Android 平台的底层基石,与更多的 Jetpack 组件深度集成,共同
它的底层原理是通过监听生命周期对象的状态变化来控制协程的执行时机,从而避免了在非UI线程中执行耗时操作的问题。Flow是Kotlin协程的扩展,底层代码是基于Kotlin协程实现的,它是一种称为“异步流”的数据结构来处理数据,可以让我们像运行同步代码一样运行异步代码,使得代码更加简洁,提高了代码的可读性。(2)在 Kotlin 中,repeatOnLifecycle 函数是一个协程函数,它可以在指
只需几步即可通过平滑渐变增强应用程序的用户界面虽然它经常出现在网络前端的世界中,但渐变背景可以为您的移动应用程序增添专业和美观的触感,使其对您的用户更具吸引力。
前期工作:首先添加依赖://room数据库def roomVersion = "2.3.0"implementation("androidx.room:room-runtime:$roomVersion")annotationProcessor("androidx.room:room-compiler:$roomVersion")// To use Kotlin annotation proces
Android原生开发快速接入高德地图,本文简单就显示地图和获取POI搜索数据进行简单的讲解。
所以,在复杂的业务逻辑下,我们可以将Stateful的状态提到ViewModel中管理,这样Stateful Composable也就变成了一个Stateless Composable,通过参数传入不同的ViewModel即可替换具体的业务逻辑,大大增加了可复用性和可测试性
Jetpack Glance是一个使用Kotlin API创建小型、轻量级和高效的应用程序小部件的框架。它设计用于显示用户需要一目了然的信息。
今天呢,给大家带来的是一个非常好用的计时工具,真的非常好用,用过之后,你会发现,延时和定时,真的从未如此简单。
kotlin + 协程 + room 结合使用
前面学习的是Kotlin 接下来就学习Jetpack ,Jetpack 是一个由多种库组成的套件。我的想法是将 Kotlin+ Jetpack灵活的运用起来。
背景MAUI的出现,赋予了广大.Net开发者开发多平台应用的能力,MAUI 是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAUI的补充和扩展项目地址https://github.com/BlazorComponent/MASA.Blazor/tree/feat
答应大伙的备战金三银四,大厂面试真题来啦!这份资料我从春招开始,就会将各博客、论坛。网站上等优质的Android开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。《960全网最全Android开发笔记》《379页Android开发面试宝典》包含了腾讯、百度
快速开始最简单的使用是用 RoutesLocationBuilder 实现,这种方式产出的代码最少。对于导航场景较少的应用或者页面栈浅的应用(即页面很少堆叠在一起)来说,是很棒的选择。class MyApp extends StatelessWidget {final routerDelegate = BeamerDelegate(locationBuilder: RoutesLocationBu
Jetpack Compose 中的布局本身就是可组合元素的它们充当容器元素, 将其他可组合元素作为其子元素通过在布局中嵌套可组合元素,并使用修改器来控制它们的位置和样式可以创建复杂且具有视觉吸引力的UIColumn布局列布局将其子元素从上到下垂直排列,把它想象成UI 元素的堆叠两个Text组件和Image组件将垂直堆叠Row布局行布局则是将其子元素从左到右水平排列,就像将UI元素并排放置一样 这
Compose 的绘制有三个阶段,组合 > 布局> 绘制。从组合到上屏的一系列过程中主要是依靠 SlotTable 系统来完成,SlotTable 记录了 Composiiton 的状态,当 SlotTable 的状态发生变化时,会触发 LayoutNode 树的更新,实现 UI 重新渲染。......
Android Jetpack由一系列库组成,涵盖了各种功能,从简化UI开发到数据持久化和后台任务管理。这些组件旨在帮助开发者摆脱繁琐的任务,专注于构建出色的Android应用。Jetpack Compose是一种用于构建用户界面的现代UI工具包,它采用了声明式的方式来描述UI的外观和行为。与传统的基于XML布局的方式不同,Jetpack Compose使用Kotlin代码来构建UI,使得UI代码
刚刚结束的 2022 年,不少应用都给出了自己的 2022 年度报告。趁着这股热潮,我自己维护的应用[译站] 也来凑个热闹,用 Jetpack Compose 写了个报告页面。效果如下:
在上一篇文章中,我们使用compose写了个游戏,虽然我说运行很流畅,但是实际上如果画布尺寸稍大就会出现卡顿,本文就将探究卡顿的原因,并给出优化方案,并且最终将计算时间由 20+ms 优化至3ms。......
为每个 ViewModel 创建一个接口。接口有两个属性,分别是 ViewModel 和 Repository。另外为每个 Action 类型都实现了一个单独的函数,每个函数的功能更具体。类继承:简单,但是有单继承限制辅助类:简单,但缺少重写灵活性。类委托:无法通过this提供 ViewModel 能力。接口默认函数:综合表现最好。特性类继承辅助类类委托接口默认函数可多继承❌✅✅✅可重写性✅❌✅✅
/ 定义运算符优先级'+' to 1,'-' to 1,'*' to 2,'/' to 2// 运算数栈和运算符栈var i = 0var allowUnary = true // 允许负号作为一元运算符// 处理数字// 连续读取数字字符// 处理运算符// 处理一元负号(当负号出现在表达式开头或运算符后)// 执行优先级更高的已有运算!!) {ops.add(c)i++// 跳过空格' ' -
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。既有适合小白学习的零基
万变不离奇宗,开发语言还是Kotlin,变化的只是写UI的方式变了,以前使用xml布局,而Compose的出现,xml,可能就无了。搞个例子瞅瞅工欲善其事,必先利其器,还处在Beta阶段的Compose,自然是需要量身定制的开发工具了,放心,肯定还是Android studio,只不过,得换个版本☞下载第一个就可以了。创建一个Compose项目在New Project中选择 Empty Compo
应该知道这个黄色的方块,最终的大小应该是10dp,为啥? 因为background 始终都是会用到他右边的尺寸大小可以看下这个background 实际上就是一个DrawModifier
本文带大家详细研究了 Jetpack Compose 里最常用的三个主要副作用处理 API。在声明式 UI 的世界里,状态能影响到执行行为的方方面面,所以把副作用管理好,对保证任务能正确、可预测地执行,是非常关键的。
Compose的重组是智能的,Composable函数在进行重组时会尽可能的跳过不必要的重组,只对需要变化的UI进行重组。那Compose是如何认定UI需要变化呢?或者换句话说Compose是如何确定重组的范围呢。如果重组随意的发生,那么对UI的性能会是一个很不稳定的状态,时而好,时而坏。而且如果编写的UI代码有问题,那么重组将会带来状态的混乱,导致UI显示出错。
一线互联网Android面试题含详解(初级到高级专题)这些题目是今年群友去腾讯、百度、小米、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。并且大多数都整理了答案,熟悉这些知识点会大大增加通过前两轮技术面试的几率如果设置门槛,很多开发者朋友会因此错过这套高级架构资料,错过提升成为架构师的可能。这就失去了我们的初衷;让更多人都能通过高效高质量的学习,提升自己的技术和格局,
这可能是你看过最详细的Compose高级API动画了。
是谷歌推出的加快Android应用开发的组件,而本应用使用的一部分仅仅是左上角绿色的一部分:这张图其实有点旧了,因为在今年五月份的谷歌开发者大会,推出了CameraX。不过,仍然可以预见的是,谷歌在致力于安卓生态环境的搭建。我的Demo采用MVVM的设计模式,这一点可以从我的架构图可以看出:示例Demo少了网络请求的部分,不过我觉得对于指导整体搭建的影响不是很大。
我们在使用Retrofit时,通常会定义一个接口,其中的方法会被Retrofit动态代理实现。自从支持协程以来,这些方法可以被声明为suspend函数。从支持suspend的角度来看,Retrofit展示了其在现代Android开发中的灵活性与强大性。通过源码的解析,我们可以深入理解它是如何将Kotlin的协程特性融入其中,从而带来了更加简洁、直观的编程体验。对于我们开发者而言,充分利用协程与Re
古有凿壁借光,今有我“钨丝灯”挑灯夜读三国,别忘记:点赞❤️+关注❤️+收藏❤️+评论❤️+转发❤️
在重新创建Activity或进程后,可以使用rememberSaveable恢复界面状态。此外,rememberSaveable也可以在重新创建activity或进程后保持吃状态。LiveData是一种可观察状态容器,这意味着它可让任何人观察状态的变化。然后我们在界面中使用observe方法,以便在状态变化时更新界面。将状态从Activity移到了Viewodel中,在ViewModel中,状态由
前面的文章提到Compose的重组是智能的,Composable函数在进行重组时会尽可能的跳过不必要的重组,只对需要变化的UI进行重组。那Compose是如何认定UI需要变化呢?或者换句话说Compose是如何确定重组的范围呢。如果重组随意的发生,那么对UI的性能会是一个很不稳定的状态,时而好,时而坏。而且如果编写的UI代码有问题,那么重组将会带来状态的混乱,导致UI显示出错。
以上就完成了一个DSL的改装,完美运行,当然这是接口有多个实现函数可以这么搞,如果接口只有一个函数我们可以选择直接使用高阶函数,或者使用SamType的方式定义都可以,完全就不需要这么麻烦的定义DSL了。可以看到其实高阶函数才是这些功能的基石,也是相比Java代码更方便的一个点,大家使用的时候一定要掌握的就是高阶函数这个点。多个函数就不能使用Sam的方式来修饰接口了,但是我们使用的是高阶函数类型,