自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

最孤单的人的博客

挥舞键盘,把自己写的明明白白.

  • 博客(120)
  • 资源 (3)
  • 收藏
  • 关注

原创 基于Android Jetpack 组件搭建 MVVM 架构 - MVVM-Project-Hilt

基于Android Jetpack组件搭建MVVM架构 ,包括 Hilt + Room + ViewModel + LiveData

2021-04-11 21:17:04 1117 2

原创 基于Android Jetpack 组件搭建 MVVM 架构 - MVVM-Project-Kodein

### 基于Android Jetpack组件搭建MVVM架构 ,包括 Kodein + Room + ViewModel + LiveData

2021-02-02 00:48:56 686

原创 Android MVP 架构 - Kotlin

# MVP-Java-Project整个项目架构:mvp+retrofit2+rxjava3+autodispose(已适配rxjava3)项目目录:整个项目的依赖包:## Libraries Used* [RxJava 3]* [Retrofit 2]* [RxJava 3 adapter for Retrofit 2]retrofit.addCallAdapterFactory(RxJava3CallAdapterFactory.create())* [Autodis.

2020-06-22 20:24:09 197

原创 Android MVP 架构 - Java

# MVP-Java-Project整个项目架构:mvp+retrofit2+rxjava3+autodispose(已适配rxjava3)项目目录:整个项目的依赖包:## Libraries Used* [RxJava 3]* [Retrofit 2]* [RxJava 3 adapter for Retrofit 2]retrofit.addCallAdapterFactory(RxJava3CallAdapterFactory.create())* [Autodis.

2020-06-22 20:18:11 314

原创 Android 多桌面图标启动, 爬坑点击打开不同页面

Android 多桌面图标启动, 爬坑点击打开不同页面

2024-03-03 22:03:19 561

原创 Android App 用Charles抓包

Charles 是在您自己的计算机上运行的 Web 代理(HTTP 代理/ HTTP 监视器)。然后将您的网络浏览器(或任何其他 Internet 应用程序)配置为通过 Charles 访问 Internet,然后 Charles 能够为您记录和显示所有发送和接收的数据。...

2022-06-16 11:40:15 2706 1

原创 【CustomView】Glide+BitmapTransformation 图片上下边框波浪处理(WaveTransformation)

Glide 添加Transformation来处理图片的圆形、圆角 以及其他样式,而Transformation有各种各样的样式

2022-06-06 21:15:06 559

原创 Android Test - Espresso 延迟匹配的实现

Espresso 会检测主线程何时处于空闲状态,以便可以在适当的时间运行测试命令,从而提高测试的可靠性。先上示例代码:来自官网 @Test fun greeterSaysHello() { onView(withId(R.id.name_field)).perform(typeText("Steve")) onView(withId(R.id.greet_button)).perform(click()) onView(with.

2022-05-10 16:46:36 787

原创 Android Test - 使用 Espresso 验证特殊情况-界面的快速跳转

涵盖单个应用的界面测试:这种类型的测试可验证目标应用在用户执行特定操作或在其 Activity 中输入特定内容时的行为是否符合预期。Espresso 会检测主线程何时处于空闲状态,以便可以在适当的时间运行测试命令,从而提高测试的可靠性。

2022-05-10 14:54:06 712

原创 Navigation: 导航到目的地

导航到目的地是使用NavController完成的,它是一个在NavHost中管理应用导航的对象。每个NavHost均有自己的相应NavController。

2022-04-14 23:23:27 1281

原创 Android Quantity Strings (Plurals)- 复数形式的“一个”不起作用

Plurals 集合是一种简单资源,您可以使用 name 属性(并非 XML 文件的名称)中提供的值对其进行引用。因此,您可以在一个 <resources> 元素下,将 plurals 资源与其他简单资源合并到一个 XML 文件中。

2022-03-28 23:13:26 2786

原创 Android 正则表达式- 检查字符串是否为电子邮件

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

2022-03-28 22:43:29 4419

原创 Android 正则表达式- 只保留字母数字

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

2022-03-28 18:00:53 4113 2

原创 Kotlin协程之Dispatchers.IO番外篇-更新UI

谷歌提出:“一定要在主线程中UI”,其实是为了提高界面的效率和安全性,带来更好的流畅度;退一步,如果允许多线程更新UI,但是访问UI没有被锁定,一旦多线程抢占资源,那么界面就会无序更新,体验效果不言而喻;所以在Android必须在主线程中更新UI。

2022-03-22 17:31:32 3740

转载 Android Test - 使用 AndroidX Test 完成其他测试任务

测试应用是应用开发过程中不可或缺的一部分。通过持续对应用运行测试,您可以在公开发布应用之前验证其正确性、功能行为和易用性。使用 AndroidX Test 的元素来进一步优化应用的测试。

2022-03-14 22:46:42 863

转载 Android Test - 概览

测试应用是应用开发过程中不可或缺的一部分。通过持续对应用运行测试,您可以在公开发布应用之前验证其正确性、功能行为和易用性。

2022-03-14 22:42:53 2676

原创 RecyclerView.SmoothScroller 自定义平滑滚动的快慢

RecyclerView.SmoothScroller 计算滚动速度。默认情况下,LinearSmoothScroller 假定此方法始终返回相同的值并缓存调用它的结果。参数:displayMetrics – 用于实际尺寸计算的 DisplayMetrics返回:每个像素应该花费的时间(以毫秒为单位)。例如,如果返回值为 2 毫秒,则意味着使用 LinearInterpolation 滚动 1000 个像素需要 2 秒。

2021-12-15 10:14:25 3215

原创 LiveData 的生命周期 - viewLifecycleOwner / this

#1. 使用 this:这里的 livedata 生命周期将与片段(Fragment)的整个生命周期(onCreate()开始、onDestroy()结束)相关联;#2. 使用 viewLifecycleOwner:这里的 livedata 生命周期将与片段(Fragment)何时拥有(和失去)其 UI(onCreateView() 开始、onDestroyView()结束)相关联;

2021-12-09 17:11:19 1375

原创 Extension method - 一对多依赖 - MediatorLiveData

LiveData:一对多依赖 —— MediatorLiveDataMediatorLiveData 允许您将一个或多个数据源添加到单个 LiveData 可观察对象。

2021-12-07 16:46:49 2862

原创 Android Room- 为表新增非空字段时报错

当在新增数据库表字段时,在添加数据库迁移脚本代码的时候,运行迁移脚本代码:database.execSQL("ALTER TABLE RepoBean ADD COLUMN `isDeleted` INTEGER NOT NULL")发现报错:(Cannot add a NOT NULL column with default value NULL)Cannot add a NOT NULL column with default value NULL根据报错提示:添加非空字段时..

2021-11-15 16:36:37 3381

原创 Android Room 升级数据库-增加字段

如果没有提供足够的迁移来从当前版本移动到最新版本,Room 将清除数据库并重新创建。对于#1,因为仅仅更新了版本号升级,所以Room会把本地的数据库清除并创建,即本地数据库的数据将会丢失,这并不是推荐的操作。

2021-11-15 16:26:46 8425

原创 Android Studio Arctic Fox版本Gradle中不显示Tasks

Android Studio 是开发 Android 应用的官方 IDE,包含构建 Android 应用所需的所有功能。Android Studio Arctic Fox 是一个主要版本,包含各种新功能和改进。

2021-09-01 15:14:28 1347

原创 Migrating build logic from Groovy to Kotlin (KTS)

Kotlin DSL(also known KTS) will be preferred over Groovy for writing Gradle scripts because Kotlin is more readable and offers better compile-time checking and IDE support. KTS Advantage: Use Kotlin, and developers may be more familiar with this lan.

2021-08-27 11:25:12 168

原创 Android Gradle 的配置从 Groovy 迁移到 KTS

Android Gradle 插件 4.0 支持在 Gradle 构建配置中使用 Kotlin 脚本 (KTS),用于替代 Groovy(过去在 Gradle 配置文件中使用的编程语言)。将来,KTS 会比 Groovy 更适合用于编写 Gradle 脚本,因为采用 Kotlin 编写的代码可读性更高,并且 Kotlin 提供了更好的编译时检查和 IDE 支持。虽然与 Groovy 相比,KTS 当前能更好地在 Android Studio 的代码编辑器中集成,但采用 KTS 的构建速度往往比采用

2021-08-18 11:31:45 4029

原创 RecyclerViews的一些做法

###良好做法:1. 尽可能使用 recyclerView.setHasFixedSize(true)。2. 使用 ConstraintLayout 进行项目布局。3. 使用侦听器附加点击处理程序。4. 建议使用 ListAdapter,而不仅仅是 RecyclerView.Adapter。5. 如果你使用 RecyclerView.Adapter 也要使用 DiffUtil。6. 不要过度设计,如果回收器视图很简单并且您永远不会更新它,只需使用简单的 RecyclerView.Ada

2021-08-13 14:20:59 88

原创 RecyclerView实现静默加载下一页 - Adapter实现

### 静默加载下一页:就是在用户查看列表数据的时候,可以一直滑一直能查看更多的数据,让用户感觉不到应用在不断的加载下一页数据,现在要实现这样功能,比如我们一页有20条数据,我们需要在用户滑到第15条数据的时候(即倒数第5条数据)就开始加载下一页数据,这样用户滑到20条数据的时候,第二页的数据我们就已经加载好了。

2021-08-10 14:31:13 1087

原创 RecyclerView刷新数据 - DiffUtil 的使用

DiffUtil 是一个实用程序类,用于计算两个列表之间的差异并输出将第一个列表转换为第二个列表,以有效更新 RecyclerView 显示的列表。

2021-08-08 16:26:05 1733 3

原创 ViewBinding - Jetpack 视图绑定委托封装及使用示例

通过视图绑定功能,您可以更轻松地编写可与视图交互的代码。在模块中启用视图绑定之后,系统会为该模块中的每个 XML 布局文件生成一个绑定类。绑定类的实例包含对在相应布局中具有 ID 的所有视图的直接引用。在大多数情况下,视图绑定会替代findViewById。

2021-08-07 22:53:23 844 2

原创 Android 应用签名 手动签名空APK

查看证书信息:keytool -list -v -keystore [demo.keystore]

2021-08-04 19:25:26 820 2

原创 Kotlin 枚举类(enum)& 密封类(sealed)

### 枚举不会被垃圾收集,它们会在您的应用程序的整个生命周期中保留在内存中。这可能是有利的,也可能是不利的。a.优点:垃圾收集过程是昂贵的。对象创建也是如此,我们不想一次又一次地创建相同的对象。因此,使用枚举,您可以节省垃圾收集和对象创建的成本。这是好处。b.缺点:枚举即使在不使用时也会留在内存中,这会使内存一直被占用。

2021-07-01 17:17:24 1224

原创 Android 屏幕适配 - 设置底部虚拟菜单栏

Android 手机现在越来越多的是全面屏/刘海屏,不止需要适配头部的状态栏,如有需要,可以参考:Android 屏幕适配 - 支持刘海屏底部的虚拟菜单栏也需要适配,这里拿小米9的机型来示例:默认是白底的,如果应用背景是其他颜色(比如黑色),是需要做下适配的;如下示例:所以我们可以简单的适配一下,即设置它的颜色来起到适配的作用;这里Android有提供方法:android:navigationBarColor/ setNavigationBarColor(@ColorInt int c..

2021-04-07 23:21:15 1513

原创 Android 计步器 - 手机自带系统级的 健康运动App 授权

#1 手机自带系统级的 健康App;比如:三星手机上的 “三星健康” ;华为手机上的“运动健康”;小米手机上的“运动计步”魅族手机: 计步器oppo: 运动计步vivo:vivo手机不自带“记步数”功能的...

2021-04-06 15:10:40 9421 9

原创 Navigation:DialogFragment执行dismiss/popBackStack 后使用previousBackStackEntry传值后跳转新Fragment报错

### D/ATestFragment:java.lang.IllegalArgumentException: Navigation action/destination(id/action_aTestFragment_to_bTestFragment) cannot be found from the current destination Destination(id/testDialogFragment) label=TestDialogFragment

2021-03-24 22:13:01 2537

原创 Navigation: DialogFragment popBackStack() 和 dismiss() 比较currentBackStackEntry/previousBackStackEntry

这里记录下在Navigation中,DialogFragment执行popBackStack() 和 dismiss() 的比较:popBackStack()Attempt to pop this navigator's back stack, performing the appropriate navigation.> 尝试弹出此导航器的后堆栈,执行适当的导航。dismiss()Dismiss the fragment and its dialog.>关闭片段.

2021-03-24 21:36:24 1327

原创 Android 自定义View出现的绘制背景区域断开的情况

先把自定义View 运行出来的效果贴一下:(贴上两张图,注意箭头标记的地方)然后发现有缺陷,会出现线条,大概还和innerWidth/innerHeight的奇偶数有关系,虽然上面代码中有除2:“innerWidth / 2” ,会存在小数,但是绘制方法(canvas.drawRect)里的参数都是Float,怎么还会有问题呢?贴下相关代码:(在最后再贴上整个自定义View的代码) // 视图不需要对其大小进行特殊控制,您只需替换一个方法,即 onSizeChanged() .

2021-03-16 23:52:14 273

原创 【CustomView】Android 自定义绘制

### 自定义视图最重要的部分是外观。绘制自定义视图可能很简单,也可能很复杂,具体取决于应用的需求。

2021-03-16 22:46:07 291

原创 【CustomView】Android 自定义视图组件

Android 提供了一个复杂且强大的组件化模型,可帮助您根据基本布局类 View 和 ViewGroup构建界面。首先,该平台包含各种预构建的 View 和 ViewGroup 子类,分别称为微件和布局,可供用来构建界面。可用的部分微件:Button、TextView、EditText、ListView、CheckBox、RadioButton、Gallery、Spinner,以及具有特殊用途的 AutoCompleteTextView、ImageSwitcher 和 TextSwitcher。

2021-03-16 22:18:15 909

原创 Android 设置透明 Activity

### App中窗口型的页面,我们可以使用Dialog,popwindow,另外还能透明的Activity来实现。

2021-03-11 21:20:20 7348

原创 Android 支持的 ABI 的应用(ABI: 设备的CPU类型)

在使用ABI的时候,我们需要当心,因为很容易运行报错。如果如果需要限制应用支持的 ABI 集,请把每个ABI 集文件夹里都放置上对应的文件,以免出现不同机型在用到对应文件时,在对应文件夹找不到而出现运行报错的情况。

2021-03-11 19:26:50 1646 1

原创 Android使用协程报错CoroutineException - (带GlobalScope/lifecycleScope的简单理解)

CoroutineScope:1. LifecycleCoroutineScope :与生命周期和Dispatchers.Main.immediate相关联,销毁生命周期时,将取消此作用域。2. GlobalScope:全局范围用于启动在整个应用程序生命周期内运行且不会过早取消的顶级协程。不建议在GlobalScope实例上使用异步或启动。

2021-02-23 21:50:39 2337 2

SlidingTabLayout.zip

【CustomView】Android SlidingTabLayout 按钮之间切换指示器滑动-简单实现:https://blog.csdn.net/qq_20613731/article/details/107240175

2020-07-10

RecyclerView ItemDecoration-实现分组/悬浮(粘性)头部【Kotlin】

https://blog.csdn.net/qq_20613731/article/details/107074421 简单说ItemDecoration就是Item的装饰,在Item的四周,我们可以给它添加上自定义的装饰

2020-07-03

Android 护眼模式的简单实现

https://blog.csdn.net/qq_20613731/article/details/106893239 此方法不涉及申请浮窗权限(用悬浮窗实现护眼模式,会涉及到优先级,然而高于系统弹框,部分机型系统弹框点击事件无效)

2020-07-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除