
Android 知识点
文章平均质量分 89
Android 知识点
yechaoa
优快云博客专家、掘金签约作者、infoQ 专家博主、阿里云专家博主、51CTO专家博主、华为云云享专家;现就职于阿里巴巴,研究方向包括但不限于大前端、端基础架构与中间件、性能优化等。
展开
-
移动端APP版本治理
业界少有的版本治理,在一个“三不管”地带,做好版本交付的最后一公里。原创 2024-01-03 22:17:29 · 1399 阅读 · 0 评论 -
JetBrains2023年度报告,编程领域的风向标
这份报告涵盖的主题也很多,包括编程语言、工具、技术等等,甚至包括年龄和收入,并增加了人工智能发展趋势,包括开发者对于AI的接受度和顾虑等。原创 2023-12-12 23:55:52 · 1549 阅读 · 0 评论 -
代码规范-对抗软件复杂度
任何系统性的项目都需要架构设计,而架构设计的核心命题是控制复杂度。 但随着项目的不断迭代,复杂度就会不断上升,研发效率就会不断下降。 而代码规范正是对抗软件复杂度的有效手段。原创 2022-11-19 20:54:59 · 1293 阅读 · 0 评论 -
【建议收藏】17个XML布局小技巧
虽然xml写的很多,而且也没有什么技术难度,但是,这也往往是我们最容易忽略的地方,写xml不难,写出好的xml还是得下点功夫了。原创 2022-10-13 23:34:59 · 1327 阅读 · 0 评论 -
带你造轮子,自定义一个随意拖拽可吸边的View
在开发中,随意拖拽可吸边的悬浮View还是比较常见的,这种功能网上也有各种各样的轮子,其实写起来并不复杂,看完本文,你也可以手写一个,而且不到`400`行代码就能实现一个通用的随意拖拽可吸边的悬浮View组件。......原创 2022-08-09 00:03:56 · 2383 阅读 · 1 评论 -
怎么简单实现菜单拖拽排序的功能
本文主角是`ItemTouchHelper`。它是RecyclerView对于item交互处理的一个「辅助类」,主要用于拖拽以及滑动处理。以接口实现的方式,达到配置简单、逻辑解耦、职责分明的效果,并且支持所有的布局方式。...原创 2022-08-04 20:48:18 · 1015 阅读 · 0 评论 -
【保姆级】包体积优化教程
市面上有很多优化方案,但是都没有形成一个完整的链路体系,现在它来了,本文将带你进阶新高度,不管是面试,还是绩效KPI,都能让你游刃有余!原创 2022-07-26 01:17:25 · 785 阅读 · 0 评论 -
【复盘】关于我在错误的时间选错了技术这件事
我为什么这么做、错在哪里、又收获了什么、以及我的思考。复盘避免再次出错,仅以此记,望后来者顺颂商祺!原创 2022-07-22 23:59:24 · 1094 阅读 · 0 评论 -
Android通知Notification使用全解析,看这篇就够了
通知是 Android 在您的应用 UI 之外显示的消息,用于向用户提供提醒、来自其他人的通信或来自您的应用的其他及时信息。用户可以点击通知打开您的应用或直接从通知中执行操作。本文将带领实现各种常见的通知功能,以及各个Android版本需要做的。发起一个普通通知的几个要素:重要通知,优先级设置最高,会直接显示在屏幕内(前台),而不是只有通知抽屉里,所以一定要设置,不要引起用户的负面情绪。这里有几个新增的配置:可以通过在通知上添加一个自定义操作,如上图:去看看。可以通过打开一个Activity,也可以是原创 2022-06-26 20:29:51 · 22983 阅读 · 7 评论 -
【首发】根据壁纸修改App主题,它真的来了
曾经产品经理的奇思妙想,现在终于可以实现了…效果中,原本是红色壁纸对应的红色App主题,在改成绿色壁纸之后,App主题也相应的变成绿色了。原创 2022-05-02 23:12:42 · 3836 阅读 · 7 评论 -
Android原生TabLayout使用全解析,看这篇就够了
前言为什么会有这篇文章呢,是因为之前关于TabLayout的使用陆陆续续也写了好几篇了,感觉比较分散,且不成体系,写这篇文章的目的就是希望能把各种效果的实现一次性讲齐,所以也有了标题的「看这篇就够了」。TabLayout作为导航组件来说,使用场景非常的多,也意味着要满足各种各样的需求。在效果实现上,有很多同学都选择自定义View来做,定制性高,但易用性、稳定性、维护性不敢保证,使用官方组件能避免这些不确定性,一是开源,有很多大佬共建;二是经过大型app验证,比如google play;有了这两点,基本原创 2022-04-24 17:56:10 · 38177 阅读 · 22 评论 -
【涨姿势】你没用过的BadgeDrawable
通常情况下,我们在做小红点效果的时候,会有两种选择: 1. 自定义BadgeView,然后设置给目标View 2. xml写一个View,然后设置shape有的同学可能会想,能实现不就行了吗,是的,代码优不优雅、骚不骚的不重要,`代码和人只要有一个能跑就行`...不过,今天来介绍一种不同的方式来实现小红点效果,或许会让你眼前一亮~原创 2022-01-16 17:48:43 · 6156 阅读 · 7 评论 -
Android包体积优化(常规、进阶、极致)
前言包大小的重要性已经不需要多说,包大小直接影响用户的下载,留存,甚至部分厂商预装强制要求必须小于一定的值。但是随着业务的迭代开发,应用会越来越大,安装包会不停的膨胀,因此包大小缩减是一个长期持续的治理过程。提升下载转化率,安装包越小,转化率越高。降低渠道推广成本。降低安装时间,文件拷贝、Library解压、编译ODEX、签名校验这些,包体积越大越耗时。降低运行时内存等等。环境Android Studio Arctic Fox | 2020.3.1 Patch 2AGP 7.0项原创 2021-10-07 15:43:28 · 2897 阅读 · 0 评论 -
【面经分享】5年Android开发的求职之路
前段时间在看机会,本文就是我对求职过程的一个总结。同时,也作为一个面试官,来说说求职中需要注意的点。原创 2021-08-15 15:12:13 · 5449 阅读 · 11 评论 -
【协程】ViewModelScope源码解析
推荐理由:1.自动取消,不会造成内存泄漏。2.配合ViewModel,能减少样板代码,提高效率。原创 2021-06-24 00:43:11 · 1608 阅读 · 1 评论 -
【协程】LifecycleScope源码解析
推荐理由:1.自动取消,不会造成内存泄漏,可以替代MainScope。2.可以基于指定的生命周期执行。原创 2021-06-22 00:50:28 · 3864 阅读 · 7 评论 -
Android ShapeableImageView使用详解,告别shape、三方库
效果前言先来看一下ShapeableImageView是什么由上图可以看到ShapeableImageView也没有什么神秘的,不过是ImageView的一个子类而已,但是从效果图来看,在不写shape、不引入三方库的情况下,还是挺容易实现预期效果的,而且扩展性良好。使用引入material包implementation 'com.google.android.material:material:1.2.1'常规<com.google.android.material.imag原创 2021-05-29 01:48:50 · 13781 阅读 · 14 评论 -
Android MaterialButton使用详解,告别shape、selector
按钮你还只用Button吗,试试MaterialButton吧。原创 2021-05-23 19:08:47 · 4834 阅读 · 12 评论 -
Android 自定义View之展开收起的Layout
效果分析效果图来看,点击事件触发view的展开收起,并在收起状态下保留了第一个子view显示,这个展开收起其实就是view的高度变化,所以只要控制好高度,就能很简单的实现这个效果。步骤1.初始化参数 设置方向等2.根据动画执行进度计算高度初始化class ExpandLinearLayout : LinearLayout { //是否展开,默认展开 private var isOpen = true //第一个子view的高度,即收起保留高度 priv原创 2021-02-18 17:13:06 · 4672 阅读 · 6 评论 -
【开源项目】Jetpack版 玩安卓
????玩安卓 Jetpack版本感谢鸿洋提供的api,也是个人写的第5个版本了。。玩安卓 Flutter版本玩安卓 Java版本玩安卓 小程序版本玩安卓 Kotlin版本玩安卓 Jetpack版本????你能学到MVVM模式的开发架构Jetpack组件的使用Kotlin语法特性、标准函数、扩展函数Material Design控件的使用等等????截图首页体系导航项目搜索关于????开发环境Andro原创 2021-02-09 23:37:14 · 3467 阅读 · 6 评论 -
Android 11适配指南之系统相机拍照、打开相册
前言适配前台程序员必不可少的工作之一,且可能要花大量的时间精力。何为前台程序员,是面向用户的一端,包括前端、移动端、PC等等。何为适配,适配就是当我们的开发环境、运行环境等发生变化的时候,程序依然能稳健运行。而适配中最难为程序员的就是Android了,除了开发环境、运行环境等因素之外,因为Android开源的原因,还要适配各大厂商。。而适配条件之多,经常让Android程序员为之头疼。来看看相机、相册相关的适配历程:Android 6 权限适配Android 7 文件适配Android原创 2021-01-28 17:33:25 · 11847 阅读 · 7 评论 -
Android 11适配指南之Toast解析
起源在targetSdkVersion为30的情况下,在Android 11的小米10的手机上运行,调用ToastUtil的时候闪退报错:null cannot be cast to non-null type android.widget.LinearLayout为什么说的这么详细呢,因为这些条件都是必须的:targetSdkVersion 30Android 11小米10同样的targetSdkVersion,在Android 11的华为P30 Pro上运行确实正常的,为什么呢,根据原创 2021-01-26 20:05:37 · 6181 阅读 · 3 评论 -
Android 自定义View之随机数验证码(仿写鸿洋)
前言本文面向自定义view新手,但是希望你最好有一定的理论知识,或基础概念,有的地方可能会一笔带过并不会细讲,细讲篇幅就太长了。本文仿写自鸿洋的自定义View (一),尽管过去了将近快7年之久,我觉得依然有学习价值。效果自定义View分类简单介绍一下自定义View分类:组合控件,继承自已有的layout,比如LinearLayout,然后通过LayoutInflater引入布局,然后处理相关事件,这种方式的好处在于,不需要过度关注view内部的绘制机制,而且扩展性也很强。继承自现有的系原创 2021-01-21 12:33:21 · 1069 阅读 · 1 评论 -
Jetpack之Room的使用,结合Flow
本文主要还是参考官方文档,然后以保存搜索历史为例操作一波。准备工作Room 在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时,能够流畅地访问数据库。依赖如需在应用中使用Room,请将以下依赖项添加到应用的 build.gradle文件。dependencies { def room_version = "2.2.5" implementation "androidx.room:room-runtime:$room_version" kapt.原创 2021-01-16 17:49:18 · 1282 阅读 · 0 评论 -
Android MediaPlayer音频播放器详解
效果音频播放,是比较常见或常用的功能,比如音乐播放器、新闻播报、听书等等,而恰巧如果你想自定义一个音频播放器的话,本文一定对你有帮助!常用方法start() 开始播放pause() 暂停播放stop() 停止播放prepare() 资源准备prepareAsync() 异步准备,不阻塞UI线程seekTo(int msec) 定位到指定位置,单位毫秒isLooping 是否循环播放isPlaying 播放状态duration 总时长currentPosition 当前位置rel原创 2021-01-06 20:48:32 · 6012 阅读 · 2 评论 -
Android 修改系统音量及监听
效果修改系统音量这种操作还是挺常见的,一般在多媒体开发中都多少会涉及到。常用方法获取音频管理器mAudioManager = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager获取媒体音量最大值mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)获取系统当前媒体音量mCurrentVolume = mAudioManager.原创 2021-01-05 19:25:27 · 6383 阅读 · 0 评论 -
Android 修改系统屏幕亮度及监听
效果修改系统屏幕亮度这种操作还是挺常见的,一般在多媒体开发中都多少会涉及到。emmm 效果图好像看不出来变化。。不过不是很重要。。操作拆解上图中可以看到,分别有加减按钮和seekbar来控制亮度。后面会涉及到相关的事件。获取系统屏幕亮度 /** * 获取系统屏幕亮度(0-255) */ private fun getScreenBrightness(): Int { try { return Settings.Sy原创 2021-01-05 16:46:46 · 6280 阅读 · 5 评论 -
Android 硬布局item的高级写法
效果:这种布局应该是非常常见了,且写的比较多。今天简单探讨一下效果图中上下两种布局的写法。比较上下效果一致行数层级上部分1213下部分552下部分继续精简282可以看出,对比还是很明显的,精简到最后只有最开始的四分之一。上部分先看常规item写法,横向的LinearLayout嵌套三个子View,分别是左边的ImageView,中间的TextView,和右边的ImageView。然后每个横向的LinearLayout之间添加一个高原创 2020-12-21 19:37:52 · 5541 阅读 · 5 评论 -
Android 打开网页之CustomTabs
一般打开url有以下几种方式:调用默认浏览器用WebView用CustomTabsIntent默认浏览器的话,是跳转到别的app,我方app就切换到后台了,至于什么时候返回回来就不确定了,且在后台有被回收的风险,不利于业务开展,如果是打开浏览器之后就完成任务的情况,可以使用。WebView是我们比较常用的,如果页面可控,且需要交互的,还是建议使用webview的。CustomTabs在用户的默认浏览器中显示网页,相当于在自己的app中用默认浏览器打开网页,效果类似WebView,但使用起来比原创 2020-12-18 16:22:25 · 6165 阅读 · 6 评论 -
Android 阿里云镜像整理
在android开发中,因为各种原因,时常编译速度缓慢甚至卡住不动,切换到阿里云maven仓库之后,则可以提升编译速度。googlehttps://maven.aliyun.com/repository/googlejcenterhttps://maven.aliyun.com/repository/publicpublic(central仓和jcenter仓的聚合仓)https://maven.aliyun.com/repository/publicgradle-plugin原创 2020-12-18 14:30:17 · 2273 阅读 · 2 评论 -
BottomSheetDialog 使用详解,设置圆角、固定高度、默认全屏等
效果MD风格的底部弹窗,比自定义dialog或popupwindow使用更简单,功能也更强大。其实细分来说,是BottomSheet、BottomSheetDialog、BottomSheetDialogFragmentBottomSheet与主界面同层级关系,可以事件触发,如果有设置显示高度的话,也可以拉出来,且不会影响主界面的交互。XML<?xml version="1.0" encoding="utf-8"?><androidx.coordinatorlayout.原创 2020-11-25 20:14:30 · 31441 阅读 · 20 评论 -
TextView 代码设置最大长度之maxLength和maxEms
除了xml直接设置之外,可能会在动态添加TextView或自定义view的时候进行设置。maxLengthxmlandroid:maxLength="3"代码TextView.filters = arrayOf<InputFilter>(LengthFilter(3))这里会有一个问题,就是使用maxLength会让ellipsize设置失效android:ellipsize="end"上面的代码就没用了,但是还有另外一种方式maxEmsxmlandro原创 2020-11-21 15:22:40 · 4416 阅读 · 0 评论 -
Android SpannableString详细解析
文章目录什么是SpannableString?各种SpanForegroundColorSpan 前景色BackgroudColorSpan 背景色ClickableSpan 点击事件URLSpan 超链接MaskFilterSpan 模糊 浮雕RelativeSizeSpan 字体相对大小AbsoluteSizeSpan 字体绝对大小ScaleXSpan 字体x轴缩放StyleSpan 样式TypefaceSpan 字体TextAppearanceSpan 文字外貌UnderlineSpan 下划线Str转载 2020-10-29 15:32:13 · 1258 阅读 · 0 评论 -
Android 服务协议隐私政策高亮可点击写法
实现效果:亦或者是在弹窗中显示,都是一样的。代码比较简单: private fun setText() { //拼接字符串 val spanBuilder = SpannableStringBuilder("同意") /** * 服务协议 */ var span = SpannableString("服务协议") //服务协议点击事件 span.setSpan(原创 2020-10-24 19:38:09 · 3776 阅读 · 5 评论 -
Android 全埋点解决方案
本文参考《Android全埋点解决方案》一书,并在实操中查漏补缺。前言为什么选择全埋点呢,因为传统的手动埋点虽然简单、扩展性强,但弊端也很明显:开发时间成本较高改动的时间成本也较高容易出现漏埋、埋错的情况代码侵入性强但也不是说全埋点就一定没有弊端,比如扩展性较差。经过调研,实际上都是以全埋点为主、手动埋点为辅的情况,从而达到比较理想的埋点效果。本文内容可能稍微有点长,但是很简单,别太长不看啊,最后有demo源码。页面一般来说我们需要的数据就是,用户在哪个页面干了什么,也就是.原创 2020-10-21 20:42:19 · 2350 阅读 · 0 评论 -
比 Java 更强大的 kotlin.Deprecated
我们都知道 Java 有一个java.lang.Deprecated注解,用来将一个 API 标记为“废弃”,或者说“不建议使用”。比如 String 类就有一个被标记为 Deprecated的构造函数:@Deprecatedpublic String(byte ascii[], int hibyte) { this(ascii, hibyte, 0, ascii.length);}Java 还提供了一个 @deprecated 的文档标签,用于提供相关信息。这个注解存在几个缺陷:无转载 2020-10-19 16:19:05 · 1948 阅读 · 0 评论 -
Android识别模拟器,判断是模拟器还是真机
文章目录前言原理禁止模拟器安装apk代码识别验证最后前言对于android开发者来说,模拟器是开发工具,但是对用户来说,可能就是薅羊毛、找漏洞的赚钱工具。不管是活动风控还是内容保护等等其他的出发点,应要求可能会要识别Android模拟器,甚至禁止模拟器登录或后续操作。今天做个简单的探讨。原理识别模拟器的原理,其实就是找出模拟器和真机的差别,但是这些差别体现在哪呢,比如运营商、手机卡、蓝牙、各种传感器等等。但是现在的模拟器也是越来越厉害了,可以模拟不同品牌的不同型号的不同版本的手机,而且有蓝牙、原创 2020-09-25 17:28:36 · 14329 阅读 · 3 评论 -
Android 复制文本到剪切板,及ClipboardManager相关操作
文章目录1.复制内容要剪切板2.清除剪切板3.获取剪切板内容这个功能也是很常见了,一般都是为了方便用户操作,比如复制订单编号。不废话,下面就来看看具体是怎么操作的。1.复制内容要剪切板tv_order_copy.setOnClickListener { //获取剪切板管理器 val cm: ClipboardManager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager //设原创 2020-07-02 11:52:32 · 3773 阅读 · 0 评论 -
学习方法分享
特别声明:原作者 liuyubobobo由于每个人的背景不同,擅长不同,每个人都有适合自己的不同的学习方法;与此同时,不同的领域,由于其本质不同,学习方法也应该是不同的。我坚信:每个人去寻找适合于自己的学习方法,是每个人一生的话题。别人叙述的所谓的“学习方法”,只能作为参考用。1、不要完美主义!我观察到的大多数同学犯得最最最最大的“错误”,就是在学习上“完美主义”。乃至后续很多其他...转载 2020-04-16 17:33:59 · 1051 阅读 · 0 评论 -
Kotlin 协程总结
文章目录一、协程是什么1.简介2.协程好在哪3.协程具体怎么用a.添加依赖b.开始使用c.suspend4.小结二、挂起是什么1.「挂起」的本质线程:协程:2.怎么就「挂起」了?3.suspend 的意义?4.怎么自定义 suspend 函数?a.什么时候需要自定义 suspend 函数a.具体该怎么写5.小结三、挂起的非阻塞式是怎么回事1.什么是「非阻塞式挂起」2.为什么要讲非阻塞式挂起3.协程...原创 2020-04-03 19:13:55 · 1879 阅读 · 3 评论