自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 资源 (4)
  • 收藏
  • 关注

原创 Android Dialog内容被底部导航栏遮挡问题定位解决

经过这个案例,大致的结论就是,Dialog+windowIsFloating(false)+FrameLayout+全屏WebView+AndroidBug5497带来的巨坑。希望能帮助到遇到同样问题的苦逼程序员们。

2023-10-30 20:33:22 648

原创 Play 资产分发(Play Asset Delivery)

Google Play发布应用,只支持上传aab格式文件。如果发布的是游戏,也已经不再支持旧版的扩展文件(OBB文件),但是游戏可能会需要大量的游戏资源一并发布,于是Google就推出了资产分发的功能,这样一来,就可以实现超过150MB的单个aab文件上传到Google Play,并且使得生成的单个基础apk不超过150MB。Play资产分发提供了比较灵活的分发模式、自动更新、压缩和增量修补功能,重要的是这些还是免费的。

2023-07-26 19:08:31 703

原创 Gradle入门篇之自定义Task类

自定义Task类,你可通过继承 Gradle 中的类实现。注意事项:自定义的 Task 类必须是可以继承的,也就是说自定义的 Task 类不能是 final 的。如果你使用 Kotlin 语言开发,要特备注意 kotlin 语法中,类定义默认是 final 的(Java 语法中,如果没有指定是 final,都不是 final),因此我们在定义 Task 类的时候,习惯性将 Task 类定义为 抽象类 (abstract),这样就可以确保 Task 类不是 final 的。

2023-06-02 12:00:50 1218

原创 Gradle基础——在构建脚本定义变量

在构建脚本中,变量主要可以分为两大类,本地变量和额外属性。这两中变量定义和使用有所不同,作用域范围也不一样。

2022-12-14 15:11:18 1961 1

原创 Android Span进阶之路——ClickableSpan

在Android中,可以使用强大的标记(Span)对象来实现富文本展示,相比 HTML 而言更高效实用。本文将对 (可点击的Span)展开深入的学习,从基本的 ClickableSpan 使用到深入自定义效果,实现ClickableSpan的点击效果,提高用户体验

2022-12-06 16:33:36 3125

原创 Gradle 构建环境变量配置

Gradle 提供多种机制用于配置 Gradle 和 指定项目的性能。开发者可以通过配置各种属性,用以提高Gradle的性能,以及实现某些特殊的构建需求(比如网络代理)

2022-08-23 14:28:44 9662

原创 Gradle基础——Gradle构建的生命周期

Gradle的核心是一种基于依赖的编程语言。在Gradle语法中,你可以定义任务和任务之间的依赖关系,Gradle保证这些任务按照依赖的顺序执行,并且每个任务只执行一次。这些任务形成一个有向无环图,一些构建工具可以在执行这些任务时构建这样的依赖关系图,Gradle在执行任何任务之前就已经构建出完整的依赖关系图。这就是Gradle的核心,让原本不可能的事情称为可能。在Gradle中通过构建脚本来配置依赖关系图,因此严格来说他们是。...

2022-08-08 18:21:47 1143

原创 Room 数据库自增长id导致数据插入失败的解决方案

在Room数据库中,我们定义数据实体类跟数据库表进行一一对应,在定义的表存我们经常会用到自增长的id列,定义了自增长的列,在插入数据时构建数据实体对象时,如果数据实体类中使用了自增长的id列,数据插入时id列的值可以设置为 null (Kotlin,Java中使用默认值),数据库会自动编排id值。但是如果数据实体类中的id列指定了默认值,出现了数据无法插入的问题(笔者经历)。

2022-05-23 10:14:22 3536

原创 Android jobb 工具使用详解

一、前言    OBB文件是Android 中的APK扩展文件,这是一种二进制格式的文件。在Android 2.3(API Level 9)及以上版本系统中,可以通过 StorageManager 类在应用中下载和装载这些扩展文件。当应用需要使用大量的文件和资源(比如音频、视频)的时候,就应当考虑使用OBB扩展文件(少量完全可以放在assets或者res中),比较常见的就是游戏类应用。jobb工具就是将资源目录生成扩展OBB文件的一个工具,使用起来也算是比较简单。

2022-03-22 19:32:55 3325

原创 Kotlin 中实现静态方法效果

本文将介绍如何在Kotlin中实现类似于Java中静态方法的效果,编写工具类,让调用看起来更加简洁。

2022-02-10 11:28:29 1995

原创 Volley 框架自定义请求(Request)之参数传递

一、前言    Volley 是 Android 官方的 HTTP 请求框架 ,它是基于 HttpURLConnection 的,OKHttp 是基于 WebSocket 的,它有一些优势,也有一些缺点,更多关于 Volley的使用,可以参考官方文档:使用 Volley 传输网络数据。二、Volley 自定义请求(Request)    使用过 Volley 的都知道,Volley 已经提供了一些请求(Request)的实

2021-11-04 18:04:42 826

原创 Android App Bundle基础入门

Android App Bundle 是一种发布格式(并不是可安装文件),文件后缀名为 `.aab`,是一个压缩文件,其中包含了应用的所有经过编译的代码和资源,APK文件的生成和签名都由 Google Play 完成。Google Play 在使用 App Bundle 生成 APK 的过程中,会针对每种设备配置进行优化,只保留特定设备需要的代码和资源,因此特定的设备会下载的 APK 的体积会得到一定程度减少。

2021-08-25 19:50:40 2607

原创 bundletool 工具使用详解

bundletool 是 Android Studio、Android Gradle 插件和 Google Play 用于构建 Android App Bundle 并将 App Bundle 转换为部署到设备的各种 APK 的底层工具。 bundletool 也可用作命令行工具,因此您可以自己构建 App Bundle,并模拟 Google Play 服务端构建应用程序 APK。

2021-08-19 11:23:14 8601

原创 Android FileProvider 详解

FileProvider 是 ContentProvider 的一个特殊子类,它可以为应用生成关联的 content:// 内容 URI ,而不是 file:/// 类型的 URI,使得应用能够实现安全地共享文件。内容 URI 允许授予对文件临时的读/写访问权限。当您构建一个包含内容 URI 的 Intent,并要将包含内容 URI 的 Intent 传递给客户端应用,可以通过 Intent.setFlags() API 添加访问权限。接收 Intent 的客户端应用将获得授予的对文件的访问权限

2021-07-30 18:34:52 23031

原创 Android 文件共享

应用通常需要向其他应用提供一个或者多个文件。例如:相册应用会需要像图片编辑器提供图片文件,文件管理器应用需要让用户可以在不同的存储区域内移动和拷贝文件。发送方应用可以共享文件的唯一方式是相应接收方应用的请求。在任何情况下,从您的应用共享文件到其他接收方应用,唯一的安全做法就是发送一个具有临时访问权限的内容 URI。具有临时访问权限的内容 URI 之所以安全,是因为它只允许接收 URI 的应用访问,并且会自动过过期。

2021-07-27 20:08:45 3269 1

原创 Android 分享数据——分享简单的数据

Android 应用的一大优点就是他们能够相互通信和融合。如果一项功能不是你应用的核心功能,并且在其他应用中已经存在,为何还要再次开发呢?在本篇幅中,将介绍通过 `Intent` 对象使用 `Android Sharesheet` 和 `Intent Resolver` 在应用之间发送和接收简单的数据(例如文本、图片、文件)通用方法。

2021-07-08 17:21:12 2549 3

原创 使用单元测试测试您的 Room 数据库

在使用 Room 数据库时,务必需要验证数据库和用户数据的稳定性。尤其是在数据库迁移过程中,必须进行进行充分的测试,保证数据库按预定完成迁移。使用单元测试来完成这些测试,无需创建Activity, 执行速度也比界面测试速度快,可以大大提高效率。另外,在应用功能界面进行测试数据库,也并不能完全覆盖所有用例,所以使用单元测试也更加全面测试。

2021-06-30 12:03:52 984

原创 在 Room 数据库中创建视图

视图是一个或者多个基本表(视图)构建的一个虚拟表,使用视图有许多的好处,其中主要的两个好处是封装查询和灵活的安全性控制。Room 从2.1.0 及更高版本开始支持 SQLite 数据库视图功能,你可以将查询封装到一个类中, Room 将这些支持查询的类称之为视图,视图在 DAO 中使用跟普通的数据实体对象一样。在本篇幅,我们将详细介绍在 Room 中创建视图并使用。

2021-06-29 16:54:04 964

原创 Android Room 数据库详解

数据库是 Room 的三大组件之一,数据库是用来存储数据的,是 Room 中必不可少的一部分。本篇幅将详细讲解 Room 数据库相关的内容

2021-06-10 17:58:10 9069 2

原创 Android Room 数据访问对象(DAO)详解

使用 Room 库存储应用数据时,通过定义数据访问对象(DAOs)与存储的数据进行交互。每一个 DAO 包含用来访问应用数据库的抽象方法,在编译时, Room 会自动生成并实现在 DAO 中定义的访问方法另外,本文本还介绍了 DAO 异步查询的相关内容,为了防止数据查询操作阻断 UI,造成 UI 卡顿,Room 不允许在 UI 主线程中访问数据库。这就意味着开发者必须将 DAO 中的查询定义成异步的。Room 库包含与多阿哥不同的框架进行集成,提供异步查询支持。

2021-06-06 23:30:23 3501 1

原创 Android Room 数据实体类详解

在使用 Room 库的过程中,定义数据实体类来表示需要存储的数据对象,每一个数据实体类与关联的数据库中的表相对应,数据实体类的每一个字段对应表中的列,每一个数据实体类对象都对应表中的一行数据。在Room中,数据实体类的关系也会折射成数据库表关系。

2021-06-06 09:51:59 4715 2

原创 Android Room 库基础入门

一、前言    Room 是 Android Jetpack 的一部分。在 Android 中数据库是SQLite数据库,Room 就是在SQLite上面提供了一个抽象层,通过 Room 既能流畅地访问数据库,又能充分展示 SQLite 数据库的强大功能。Room 主要有以下几大优点:在编译时校验 SQL 语句;易用的注解减少重复和易错的模板代码;简化的数据库迁移路径。    正是 Room 有以上的优点,所以建议

2021-06-06 09:25:23 2231 4

原创 Google结算库集成避坑指南

一、前言    Google结算库是Google官方提供的Google 支付库,在这之前,需要集成Google内购功能,都是使用 AIDL 的方式调用Google Play,AIDL 方式的调用存在许多问题,容易出现闪退,且此种方式已经长期没有更新。另外,Google也提出废弃 AIDL 方式集成,并给出了必须更新的时间节点(从 2021 年 8 月 2 日起,所有新应用都必须使用结算库版本 3 或更高版本。截至 2021 年 11 月 1 日,对现有应用的所有更新

2021-04-09 15:44:29 4203 1

原创 使用调色板(Palette)API 获取颜色

一、前言    使用调色板 API,可以获取 Bitmap 图片中的颜色,并提供了六个主要颜色配置。可以通过 Palette API 获取图片中的颜色,然后对整个页面的UI主体风格进行设置。例如根据配图色调更改标题栏颜色、文本内容等等。二、使用 调色板(Palette) API 选择颜色2.1 添加 Palette API 支持    Palette API 是一个支持库,需要在项目中添加依赖库才能使用。depende

2021-03-10 12:34:51 1553

原创 使用 dom4j 删除 XML 节点后回写文件出现空白行的清除方法

一、前言    对于 dom4j 大家应该都非常了解,他是一个灵活的 XML 框架库,可以解析并修改 XML 的内容。二、情景再现    在使用 dom4j 处理 XML 时,如果删除了 XML 中的某些节点,再次回写文件时,会发现回写之后的文件出现了许多空白行。如下示例:示例 XML<?xml version="1.0" encoding="UTF-8"?><resources>

2021-03-04 16:31:44 1413 2

原创 Android异形屏适配(官方方案)

一、前言    刘海屏,又叫水滴屏、挖孔屏,起初是iOS设备上的杰作,有吐槽,也有赞美。刚出来不久,国内的各大厂商开始效仿,起初官方并没有API进行适配,一些厂商(例如小米、vivo)自己搞了刘海屏,只能用自己的API进行检测适配,这些就是蛋疼的事,不过这篇文章不介绍这些不入流的设备,毕竟从Android 9.0 开始Android官方也出了刘海屏的适配支持,这里主要将官方的(因为现在国内各大厂商出的设备都是基于新系统,都支持官方API检测和适配)二、...

2021-02-08 17:17:48 9694

原创 Android动力学动画之弹簧动画(SpringAnimation)

一、前言    Android提供了动力学动画(DynamicAnimation)的支持,这类动画带有物理动力学的相关特性(而不是硬生生的变化),其中弹簧动画(SpringAnimation)就是一种。顾名思义,弹簧动画就是符合弹簧收缩特性的动画。二、...

2020-12-25 10:21:31 2036

原创 矢量图像资源详解(Vector drawables)

前言    

2020-12-02 17:22:40 1655 4

原创 Android动画之为Drawable图片添加动画

一、前言    在某些情况下,我们需要为图片添加动画效果,比如在用户操作之后,将图标转换成另一张图标。Android 提供了多张方案为 Drawable 添加动画。首先就是使用 AnimationDrawable ,这种方案通过指定多张静态的 Drawable 图片文件组合在一起构成动画(每个时刻只显示一张图片)。另一种就是使用 AnimatedVectorDrawable,这种方案是通过改变矢量图片的属性实现动画。二、使用 AnimationDrawable&

2020-11-27 10:54:02 2303

原创 CSDN博客的MarkDown编辑器实现页内跳转之方法二

一、前言    笔者之前探讨出一个在CSDN博客的MarkDown编辑器实现页内跳转的方法(请参考:CSDN博客的MarkDown编辑器实现页内跳转),但是这个方法有个缺点就是必须在文章前面添加 [toc] 生成目录,删除了目录肯能会造成无法跳转,对于篇幅较长且章节较多的文字,也不够美观。经过笔者不断的探讨,发现了一个更为简单有效的方法。二、如何实现    这种方法实现非常的简单,同样采用定义链接的方式,使用 [这里是显示

2020-11-10 18:49:08 282

原创 Android 属性动画(六)使用 ViewPropertyAnimator 实现多属性动画效果

一、前言    在前面章节中,提到了 使用 AnimatorSet 编排多个动画,通过 AnimatorSet 可以直接为一个目标对象的多个属性添加动画效果。对于实现由多个属性共同组成的动画效果,还有一种更优的方案,那就是 ViewPropertyAnimator。二、使用 ViewPropertyAnimator 实现多属性动画效果    ViewPropertyAnimator 有助于使用单个底层 Animator 对

2020-11-10 18:16:15 718

原创 Android 属性动画(五)为 ViewGroup 布局更改添加动画效果

    属性动画系统不但能轻松为视图对象本身添加动画效果,而且提供了对 ViewGroup 布局的更改添加动画效果的功能。    可使用 LayoutTransition 类为ViewGroup 内的布局更改添加动画效果。当向 ViewGroup 中添加或删除视图时,或者使用 setVisibility() 方法改变视图的可见性(VISIBLE、INVISIBLE 或 GONE)时,这些视图会经历出现和消失动画,或者以动画的形

2020-11-10 17:39:27 1150

原创 Android 属性动画(四)使用动画插值器

一、插值器简介    属性动画的插值器,它是用来计算动画的。插值器会接收来自 Animator 一个表示动画 已播放时间分数,然后根据这个已播放时间分数计算出 插值分数,评估程序根据插值分数再计算出当前属性的值。 已播放时间分数 和 插值分数 之间有什么差别呢?在动画播放过程中,对于时间而言,是以恒定速度变化,动画已播放的时间和总时间的比,就是 已播放时间分数。但是在固定的时间段内,动画的播放的比例可能是不同的,已播放完成的动画跟总动画的比,就叫做 插值分数。如果为

2020-11-05 19:51:24 1059

原创 Android 属性动画(三)使用类型评估程序--TypeEvaluate

一、自定义类型评估程序的意义    在 Android 属性动画(一)新手入门 中就已经介绍了属性动画的类型评估程序(TypeEvaluator)是用于定义在动画中如何计算添加了动画效果的属性的值,即属性值跟时间之间的关系(随着时间如何变化)。插值器会接收来自 Animator 的分数,这个分数表示动画已播放的时间,插值器会计算出插值分数,评估程序根据这个插值分数计算出属当前性值。Android系统已经定义了可识别类型的评估程序,分别是 IntEvaluator、F

2020-11-04 19:26:37 247

原创 Android 属性动画(二)为视图状态更改添加动画效果

一、场景介绍    在 Android 中,要为视图状态变更添加动画效果(比如:Button、RadioButton状态变更),可以通过 StateListAnimator 类来实现,只需要一个 XML 动画资源文件,仅用一张图片资源就可以实现点击效果,简单易用。StateListAnimator 可以定义一系列的动画,这些动画将会根据关联的 View 的状态变更而进行动画切换。二、使用介绍    StateList

2020-11-04 15:12:19 340

原创 Android 属性动画(一)新手入门

一、属性动画简介    Android 中动画有很多种,属性动画就是其中的一种。所谓的属性动画,就是在指定的时间内,通过改变对象的属性达到变化效果的动画。在 Android 中,属性动画系统是一个强健的框架,几乎可以为任何内容添加动画效果。实现属性动画也是通过 Android 的属性动画系统实现,开发者只需要定义动画的一些属性即可完成,这些属性如下:时长(duration):指定动画的时长。默认时长为 300 毫秒。时间插值(interpolator):指定如

2020-11-03 19:45:23 790

原创 轻松上手Snackbar控件

一、前言    Snackbar 控件是 Material design 产物,它的作用是显示弹出消息,这个系统的 Toast 类似,但是它又有优于 Toast 的地方,它可以添加用户交互,如果需要,它可以一直显示,直至操作取消或者调用取消接口。如果你的应用中有这的场景,那么就可以考虑 Snackbar 这个控件了。二、轻松上手2.1 引入依赖    Snackbar 控件不是系统控件,使用需要引入依赖库:// 如果你

2020-09-27 19:40:25 1032

原创 Android RecyclerView从入门到精通

文章目录一、前言二、RecyclerView 使用入门2.1 添加支持库2.2 将 RecyclerView 添加到布局2.3 在代码中引用 RecyclerView 并配置一、前言    在以前的Android开发过程中,列表使用 ListView, 网格使用 GridView。随着Android不断的发展,官方推出了许多性能更优的控件,其中 RecyclerView 就是其中之一。RecyclerView 是 ListView 和 GridView 的更高级版

2020-09-08 11:39:00 689

原创 Android MotionLayout详解

文章目录一、前言二、使用入门2.1 引入依赖2.2 创建 MotionLayout 布局文件2.3 创建 MotionScene一、前言    MotionLayout 其实是一种布局类型,可帮助您管理动画。MotionLayout 是 ConstraintLayout的子类(关于 ConstraintLayout 的介绍可以参考: Android ConstraintLayout从入门到精通),因此, MotionLayout 拥有者 ConstraintLay

2020-07-22 17:55:37 2367 1

原创 Android ConstraintLayout从入门到精通

文章目录一、前言一、前言    大家都知道,在Android中是通过布局来定义应用中的界面结构,随着版本的更新迭代,有些布局类型因为适用性退出了历史的舞台,例如:AbsoluteLayout。也增了一些布局类型,例如本文提到的 ConstraintLayout (ConstraintLayout 是 Android Jetpack 的一部分)。    在Android中,布局的嵌套层次过多,会影响UI的绘制性能,降低应用的

2020-06-30 17:42:32 1585

金山词霸2009专业版破解补丁(内含使用方法)

金山词霸是一款很好用的词典,但是收费软件对于学生来说,很多人都不愿意接受,这是一个破解补丁,我试过了,很好用,请用之前认真阅读ReadMe.txt文件,那里有具体的使用方法

2010-04-10

FoxReader PDF电子书阅读器

一款强大的支持PDF电子书的编辑,和打印的阅读器

2010-01-12

无需安装的图片格式转换工具

一款可以把格式的图片转换成另一种格式的图片,方便,无需安装

2010-01-10

一款支持任何时间关机操作的软件

可以设置任何时间内自动关机、休眠,重启等 而且操作简单, 方便我们定时操作电脑

2010-01-10

空空如也

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

TA关注的人

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