- 博客(192)
- 收藏
- 关注
原创 Android---SmartRefreshLayout实现上拉刷新和下拉加载更多
2. 如果使用 AndroidX 先在 gradle.properties 中添加。因为这个第三方库里有用到旧版的 Support 依赖包。android.enableJetifier=true 这个属性的作用可以简单理解为,如果自己的项目为 AndroidX,但也用到了一些第三方库,而第三方库里面还用的是旧版的依赖。这种情况下就会发生冲突。android.enableJetifier=true 这个属性就会在编译的时候把第三方依赖里面的旧版依赖换成我们 AndroidX 里的依赖。
2024-03-03 13:47:19 2398
原创 Android---Jetpack Compose学习007
上面的示例中,当我们启动 App 时就会让 LaunchedEffect 进入组件树时,启动一个协程,并将 block 放入该协程中执行。,SideEffect 并未接收任何 key 值,所以,每次重组,就会执行其 block。,就需要将耗时操作放入协程中执行,而协程需要在协程作用域中创建,因此 Compose 提供了 LaunchedEffect 用于创建协程。组合函数是主要是用来做 UI 声明的、描述的,只要你在可组合函数内做了与 UI 描述不相关的操作,这一类操作其实都属于副作用。
2024-02-22 18:12:57 1349
原创 Android---Retrofit实现网络请求:Kotlin版
Retrofit 是一个建立在 OkHttp 基础之上的网络请求库,能够将我们定义的 Java 接口转化为相应的 HTTP请求,Retrofit 是适用于 Android 和 Java 的类型安全 HTTP 客户端。通过Retrofit,我们可以轻松发起网络请求,还能将服务器返回的数据转换为所需的格式,如 JSON。
2024-02-19 17:25:19 2666 2
原创 Android---Retrofit实现网络请求:Java 版
Retrofit 是一个建立在 OkHttp 基础之上的网络请求库,能够将我们定义的 Java 接口转化为相应的 HTTP请求,Retrofit 是适用于 Android 和 Java 的类型安全 HTTP 客户端。通过Retrofit,我们可以轻松发起网络请求,还能将服务器返回的数据转换为所需的格式,如 JSON。
2024-02-19 11:28:23 998
原创 Android---DslTabLayout实现底部导航栏
DslTabLayout+ViewPager2+Fragment 实现底部导航栏
2024-02-16 21:17:15 1710
原创 Android---Jetpack Compose学习006
示例:上面的垂直滚动中,我们是在 Column 内部改变(rememberScrollState 返回的是一个 ScrollState) state 值。函数,该函数将在每个滚动步骤(通过手势输入,平滑滚动或投掷)调用,并且增量以像素为单位。启动滚动操作的手势会自动从子级传播到父级,这样一来,当子级无法进一步滚动时,手势就会由其父元素处理。与滚动修饰符不同,区别在于 scrollable 可检测滚动手势,但不会偏移其内容。,你可以拖动元素,释放后,这些元素通常朝一个方向定义的。示例2:往任意方向拖动。
2024-02-16 16:28:19 552
原创 Android---Jetpack Compose学习005
示例:当我们向上滚动 LazyList() 时,FloatingActionButton 收缩时会有明显的动画效果。示例:背景颜色在紫色和绿色之间,以动画形式切换。使用 animateColorAsState()该句代码中,有一个 backgroundColor 属性来设置背景颜色的变化。简单值动画中判断当前页面使用哪种颜色,然后切换页面时带动画效果。点击其中一个主题,可以看到它随着动画扩展和收缩。当它的内容改变时,这个列的大小是动态的。动画显示此可见性变化。
2024-02-15 21:01:37 646
原创 Android---Jetpack Compose学习004
示例:有两个 Card ,分别设置不同 elevation(z 轴上的海拔) 属性。将 elevation 定义为自己的 CompositonLocal,即。右边第一个 Mycard 的海拔比较高,而第二个 MyCard 的海拔较低。//TODO 自定义一个 CompositionLocal// 初始化一些预定值){Card (elevation = elevation, // 海拔,一种阴影效果Column {
2024-02-15 13:21:10 1110
原创 Android---QUMI实现沉浸式状态栏
沉浸式状态栏是指将 App 的状态栏与应用界面进行融合,使得应用界面能够占据整个屏幕的控件,从而提供更加沉浸式的用户体验。通过使用沉浸式状态栏,应用界面可以延伸到状态栏的区域,使得应用界面的内容更加丰富,同时也能够增加应用的视觉效果。
2024-02-13 23:29:37 865
原创 Android---PermissionX实现动态权限申请
PermissionX是一个扩展Android库,使Android运行时权限请求变得极其容易。你可以将它用于基本的许可请求场合或处理更复杂的情况,如显示理由对话框或手动进入应用程序设置以获得许可。
2024-02-13 10:20:16 3029
原创 Android---Jetpack Compose学习003
在科学技术中,指物质系统所处的状态。也指各自聚集态,如物质的固、液、气等状态。当系统的温度、压力、体积、物态、物质的量、各种能量等等一定时,我就就说系统处于一个状态(state)。
2024-02-12 10:59:36 1239 3
原创 Android---Jetpack Compose学习002
在 Compose 中,界面元素由可组合函数表示,此类函数在被调用后会发出一部分界面,这部分界面随后会被添加到呈现在屏幕上的界面树中。每个界面元素都有一个父元素,还可能有多个子元素。此外,每个元素在其父元素中都有一个位置,指定为(x, y)位置;也都有一个尺寸,指定为 width 和 height。使用布局修饰符你可以使用layout 修饰符来修改元素的测量和布局方式。Layout 是一个 lambda;它的参数包括你可以测量的元素(以 measurable 的形式传递)以及该组合项的传入。
2024-02-10 21:53:57 1625
原创 Android---Kotlin 学习013
Java 世界里所有对象都可能是 null,而 kotlin 里面不能随便给一个变量赋空值的。所有,kotlin 取调用 java 的代码就很容易出现返回一个 null,而Kotlin 的接收对象不能为空,你不能想当然地认为 java 的返回值就能符合 kotlin 关于空值的规定。
2023-12-28 21:11:04 1149 1
原创 Android---Kotlin 学习012
函数式编程范式主要依赖于高阶函数(以函数为参数或返回函数)返回的数据,这些高阶函数专用于处理各种集合,可方便地联合多个同类函数构建链式操作以创建复杂的计算行为。Kotlin 支持多种编程范式,所以你可以混用面向对象编程和函数式编程范式来解决手头的问题。
2023-12-28 10:37:12 1035
原创 Android---Kotlin 学习011
扩展可以在不直接修改类定义的情况下增加类功能,扩展可以用于自定义类,也可以用于比如 List、String,已经 Kotlin 标准库里的其它类。和继承相似,扩展也能共享类行为,在你无法接触某个类定义,或者某个类没有使用 open 修饰符,导致你无法继承它时,扩展就是增加类功能的最后选择。
2023-12-27 15:47:45 1248
原创 android---Jetpack Compose 学习001
Compose 提供了一种现代的方法来定义你的 UI,这使你可以有效地实现关注点分离。由于 Composable 函数与普通 Kotlin 函数很相似,因此你使用 Compose 编写和重构 UI 所使用的工具与你进行 Android 开发的知识储备和所使用的工具将会无缝衔接。
2023-12-26 16:08:13 1329
原创 Android---Kotlin 学习010
Kotlin 规定所有的接口属性和函数实现都要使用 override 关键字,接口中定义的函数并不需要 open 关键字修饰,他们默认就是 open 的。
2023-12-26 09:39:37 1044
原创 Android---Kotlin 学习009
在 java 里如果一个类没有被 final 关键字修饰,那么它都是可以被继承的。而在 kotlin 中,类默认都是封闭的,要让某个类开放继承,必须使用 open 关键字修饰它,否则会编译报错。此外在子类中,如果要复写父类的某个方法,需要用到关键字 Override(在 kt 中就不是注解了)。并且被复写的方法也需要用 open 关键字来修饰。
2023-12-25 19:25:42 1659 2
原创 Android---Kotlin 学习008
kotlin 允许你不使用临时变量,而是直接用一个定义同时指定参数和类属性。通常,我们更细化用这种方式定义类属性,因为它会减少代码重复。
2023-12-25 11:46:18 1463
原创 论文解读|[AAAI2023]DPText-DETR: Towards Better Scene Text Detection with Dynamic Points in Transformer
1. 图片输入到 CNN 主干 + Transformer 编码器进行提取特征,在最终的编码层生成多个。
2023-12-22 09:31:29 1239
原创 Android---Kotlin 学习007
集合可以方便你处理一组数据,也可以作为值参传给函数,和我们学过的其它变量类型一样,List、Set 和 Map 类型的变量也分为两类,只读和可变。
2023-12-15 10:40:54 676
原创 Android---Kotlin 学习006
解释说明:当 {it.exists() && it.canRead()}(匿名函数) 结果为 true, 那么这一句 takeIf { it.exists() && it.canRead() } 返回接收者对象(即File),然后再调用 readText();和其它标准函数有点不一样,takeIf 函数需要判断 lambda 中提供的条件表达式,给出 true 或 false 结果,如果判断结果为 true,从 takeIf 函数返回接收者对象,如果是 false,则返回 null。
2023-12-13 20:29:27 705 1
原创 Android---Kotlin 学习005
第二个"===" 比较的是 str1 和 str2 是否是同一个对象,这里返回 true,说明它们是同一个对象。原因是因为,在 java 的 JVM 中对字符串的存储是有一个 单独的地方, 叫字符串常量池,当我们创建 str1 = "Jason" 时,那么这个 "Jason" 字符串是在常量池里是。在 kotlin 中,用 == 检查两个字符串中的字符是否匹配,用 === 检查两个变量是否指向内存堆上同一对象,而在 Java 中 == 做引用比较,做结构比较时用 equals 方法。
2023-12-13 16:39:44 212
原创 Android---Kotlin 学习004
解释说明:str 为空类型变量,在它上面执行 let 函数,就可以做更多的操作,比如这里的判断你操作。Kotlin 区分可空类型和非可空类型,所以,你要一个可空类型变量运行,而它又可能不存在,对于这种潜在危险,编译器时刻警惕着。Kotlin 标准库提供了一些便利函数,使用这些内置函数,你可以抛出带自定义信息的异常,这些便利函数叫做先决条件函数,你可以用它定义先决条件,条件必须满足,目标代码才能执行。它的作用就是,当 str2 为空时,就直接跳过调用此函数,所以执行该行代码时就不会报空指针异常。
2023-12-12 14:59:31 131
原创 Android---Kotlin 学习003
因为当我们定义一个变量时一般是: val blessingFunction : String,所以冒号“:” 后面的内容就是它的类型,即这里一个函数 () -> String(这个函数无参,返回值为 String)。上面代码的最后一个参数是 lambda, 那么括住 lambda 值参的圆括号就不需要了,因为这里 lambda 不是唯一的参数,所以正确的写法是放到圆括号外面,如下代码所示。匿名函数也有类型,匿名函数可以当作变量赋值给函数类型变量,就像其他变量一样,匿名函数就可以在代码里传递了。
2023-12-12 10:12:00 265
原创 Android---Kotlin 学习002
在 Kotlin 之前,函数不返回任何东西用 void 描述,意思是“没有返回类型,不会带来什么,忽略它”,也就是说如果函数不返回任何东西,就忽略类型。编译时常量只能是常见的基本数据类型:String,Int,Double,FLoat,Long,Short,Byte,Char,Boolean。因为编译时常量必须在编译时赋值,而函数都是在允许时才调研,函数内的变量也是在运行时赋值,编译时常量要在这些变量赋值前就已存在。来修饰,就相当于 java 中 final 修饰的量,即常量。传入参数在前,返回结果在后。
2023-12-11 15:15:31 399
原创 Android---Kotlin 学习001
Kotlin 的应用范围迅速扩展,它从一门前途光明的编程语言摇身一变,成了这个世界上最重要的移动操作系统的钦定开发语言。Kotlin 语法简洁,具备现代高级语言特性,并且能和 Java 遗留代码无缝互操作。因为具备这些优势,今天又来越多的公司使用它开发。
2023-12-11 09:58:49 335
原创 论文解读|[CVPR2021]Progressive Contour Regression for Arbitrary-Shape Scene Text Detection
现在的解决文本检测的方法都是自下而上的建模方式,都是基于像素级、小组件,因此会对噪声比较敏感,且依赖于复杂的启发式后处理操作。
2023-12-07 23:03:33 243
原创 Android---Gradle 构建问题解析
介绍了 gradle 构建中的 Task 和 project。Task 与大部分开发者的开发是最为紧密的,是 gradle 构建的基本单元。每次编译工程时,Android studio 会在控制台打印出执行的 task 名称。project 对应项目中的 module,每个 module 中包含一个 build.gradle。每个 build.gradle 都会被 gradle 编译成 Project 字节码。在 build.gradle 中所写的所有逻辑,最终都会被映射成此 Project 字节码
2023-11-16 20:53:38 476
原创 Android---网络编程优化
DNS 解析优化,分安全性和速度提升两方面。对于请求返回的数据需要缓存到本地数据库中。“发送埋点”的请求失败就将其保存到本地数据库中,当 App 重启或者重新接收到连接网络时,重新尝试发送之前失败的请求。幂等性在网络架构设计中是一个比较重要的原则。
2023-11-16 20:48:35 421
原创 Android---动态权限适配问题
本次主要介绍了 Android 系统中申请权限相关的知识点,主要是针对 Android 版本 23 之后的动态申请做了详细介绍。需要掌握的方法:1)checkSelfPermission 检查某权限是否已经申请;2)requestPermissions 主动发送申请权限的请求;3)shouldShowRequestPermissionRationale 判断用户之前对申请权限做出的相应动作。
2023-11-12 15:37:44 794
原创 Android---内存泄漏的优化
本次主要介绍了 Android 内存泄漏优化的相关知识。1)内存泄漏预防。这需要了解 JVM 发生内存泄漏的原因,并在平时开发阶段养成良好的编码规范。针对编码规范 Android Studio 可以安装又给阿里代码规范的插件,能够起到一定的代码检查效果。2)内存泄漏检测。内存泄漏检测工具有很多 Android Stuido 自带的 Profiler,以及 MAT 都是不错的选择。使用这些工具排查内存泄漏门槛稍高,并且全部是手动操作,略显麻烦。
2023-11-11 16:41:05 537
原创 Android---MVP 中 presenter 声明周期的管理
对 MVP 架构中 Presenter 层的使用做了2点优化介绍:1)如何支持 Presenter 的生命周期,使其在 Activity 被销毁时也能取消相应的耗时请求。2)合理使用 Presenter 的生命周期,Activity 中所有的方法都委托给 Presenter 来处理是不合理的。这样会造成 Presenter 层极其庞大,也难以维护,有时也会违反职责单一原则。
2023-11-11 12:17:32 679
原创 Android---App 崩溃
本次主要介绍了 Android 崩溃的相关知识。对于 Android 工程师来说,crash 可以分为2层:Java 层和 Native 层。Java 层一般通过自定义 UncaughtExceptionHandler 进行异常拦截。Native 层可以考虑集成谷歌的 breakpad 进行捕获,并保存日志在本地。最后介绍了几个线上捕获 crash 的工具:Bugly、XCrash 和 Sentry。
2023-11-10 22:27:53 737
原创 Android---屏幕适配的处理技巧
本次主要介绍了几个 Android 屏幕适配的技巧,主要包含:使用 ConstraintLayout 能够完美实现布局内部控件之间的约束条件,并且能够;LinearLayout 和 RelativeLayout 等布局;在 ConstraintLayout 基础上,再加上多 dimens 适配方案基本就能实现所有的屏幕适配;对于特殊 UI 控件的适配再做针对性适配,主要介绍了 TextView 和 ImageView d 几个适配技巧。
2023-11-10 22:26:17 703
原创 Android---彻底掌握 Handler
Handler 现在几乎是 Android 面试的必问知识点,大多数 Adnroid 工程师都在项目中使用过 Handler。主要场景是子线程完成耗时操作的过程中,通过 Handler 向主线程发送消息 Message,用来刷新 UI 界面。
2023-11-05 15:41:32 428
原创 Android---App 的安装过程
主要介绍了一个 Android 项目从编译成 apk 文件,然后被安装到手机设备上的简要过程。编译分为:资源 + 源代码。生成 apk 之后还要经过签名、对齐等操作;apk 安装分2块进行:安装包拷贝和代码装载
2023-11-05 15:39:04 669
原创 Android---如何同view进行渲染
主要介绍了 ViewRootImpl 是如何执行 View 的渲染操作的。其中核心方performTraversals 方法中会按顺序执行 measure->layout->draw 操作。介绍了软件绘制和硬件绘制的区别;介绍了 View 刷新的两种方式 Invalidate 和 postInvalidate。
2023-10-30 22:26:26 402
原创 Android---底层剖析 Window、Activity、View 三者关系
通过setContentView的流程,分析了Activity. Window. View 之间的关系。整个过程Activity表面上参与度比较低,大部分View的添加操作都被封装到Window中实现。Activity能够更简单的实现Window和View的操作逻辑。
2023-10-30 14:41:48 968
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人