自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yechaoa

好记性不如烂笔头

  • 博客(309)
  • 资源 (2)
  • 论坛 (1)
  • 收藏
  • 关注

原创 【开源项目】Jetpack版 玩安卓

????玩安卓 Jetpack版本感谢鸿洋提供的api,也是个人写的第5个版本了。。玩安卓 Flutter版本玩安卓 Java版本玩安卓 小程序版本玩安卓 Kotlin版本玩安卓 Jetpack版本????你能学到MVVM模式的开发架构Jetpack组件的使用Kotlin语法特性、标准函数、扩展函数Material Design控件的使用等等????截图首页体系导航项目搜索关于????开发环境Andro

2021-02-09 23:37:14 2235 5

原创 【开源项目】Kotlin版 玩安卓

【开源项目】之 玩安卓 的第四个版本Kotlin版

2020-01-20 12:28:18 1800 4

原创 【开源项目】小程序版 玩安卓

????wanandroid_mini【小程序版 玩安卓】感谢鸿洋提供的api玩安卓 Flutter版本玩安卓 Java版本玩安卓 小程序版本老铁,点个star????github:https://github.com/yechaoa/wanandroid_mini????截图首页体系导航项目????你能学到轻松上手小程序系列网络框架的封装定时器的使用页...

2019-09-27 20:14:47 393

原创 【整理篇】Flutter 常用第三方库、插件、学习资料等

fluttertoast: ^3.0.4Toasthttps://github.com/PonnamKarthik/FlutterToastdio: ^2.1.3网络请求https://github.com/flutterchina/diocookie_jar: ^1.0.0cookie持久化等https://github.com/flutterchina/cookie_...

2019-08-07 17:51:56 3928

原创 【开源项目】Flutter版 玩安卓

wanandroid_flutter玩安卓的flutter版本,首先感谢鸿洋提供的api,然后就是这个项目目前还在开发中,不过主体框架已经出来了,而且常用的widget也基本都用到了,后面会继续开发并完善。 先截几个图稍微看下效果:涉及到的知识点BottomNavigationBarFlutterJsonBeanFactory加载WebView网络请求ExpansionP...

2019-06-03 11:30:42 1255 4

原创 Android开发版本和API等级对应关系

记一下Platform VersionAPI LevelVERSION_CODE9.028P8.127O_MR18.026O7.125N_MR17.024N6.023M5.122LOLLIPOP_MR15.021LOLLIPOP4.4w20KITKAT_WATCH4.419KI...

2018-10-11 14:24:10 2613

原创 【开源项目】Java版 玩安卓

MD + Retrofit + RxJava + MVP + AndroidX接口玩Android 开放APIAPK截图 TODO功能完善,代码结构优化界面美化,加动画效果从产品角度进一步优化现阶段很糙,慢慢打磨感谢开源YUtilsRxJavaRetrofitRxAndroidOkHttpGlide...

2018-05-20 22:16:44 776

原创 【整理篇】Android 开发小技巧

/storage/emulated/0/…手机内部存储路径mEditText.setKeyListener(null);EditText设置不可编辑,比focusable、enable更粗暴android:foreground=”?android:attr/selectableItemBackground”item的水波纹效果,在item的View加上这一属性...

2018-04-27 15:56:16 437

原创 Android快速开发整理(库、插件、常用网站)

一、官方支持库compile ‘com.android.support:appcompat-v7:26.1.0’compile ‘com.android.support:support-v4:26.1.0’compile ‘com.android.support:recyclerview-v7:26.1.0’compile ‘com.android.support:...

2018-02-07 22:21:39 4808

原创 Android快速开发工具集合——YUtils

Android快速开发工具集合——YUtilsHow to useStep 1 project:build.gradleallprojects { repositories { ... maven { url 'https://jitpack.io' } }}Step 2 app:build.gradledependenc...

2017-04-02 18:12:59 1439

原创 Android 自定义View之展开收起的Layout

效果分析效果图来看,点击事件触发view的展开收起,并在收起状态下保留了第一个子view显示,这个展开收起其实就是view的高度变化,所以只要控制好高度,就能很简单的实现这个效果。步骤1.初始化参数 设置方向等2.根据动画执行进度计算高度初始化class ExpandLinearLayout : LinearLayout { //是否展开,默认展开 private var isOpen = true //第一个子view的高度,即收起保留高度 priv

2021-02-18 17:13:06 2397 6

原创 Android 11适配指南之系统相机拍照、打开相册

前言适配前台程序员必不可少的工作之一,且可能要花大量的时间精力。何为前台程序员,是面向用户的一端,包括前端、移动端、PC等等。何为适配,适配就是当我们的开发环境、运行环境等发生变化的时候,程序依然能稳健运行。而适配中最难为程序员的就是Android了,除了开发环境、运行环境等因素之外,因为Android开源的原因,还要适配各大厂商。。而适配条件之多,经常让Android程序员为之头疼。来看看相机、相册相关的适配历程:Android 6 权限适配Android 7 文件适配Android

2021-01-28 17:33:25 3799 6

原创 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 2356 2

原创 Android 自定义View之随机数验证码(仿写鸿洋)

前言本文面向自定义view新手,但是希望你最好有一定的理论知识,或基础概念,有的地方可能会一笔带过并不会细讲,细讲篇幅就太长了。本文仿写自鸿洋的自定义View (一),尽管过去了将近快7年之久,我觉得依然有学习价值。效果自定义View分类简单介绍一下自定义View分类:组合控件,继承自已有的layout,比如LinearLayout,然后通过LayoutInflater引入布局,然后处理相关事件,这种方式的好处在于,不需要过度关注view内部的绘制机制,而且扩展性也很强。继承自现有的系

2021-01-21 12:33:21 158 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 108

原创 【解决问题的思路】its super classes have no public methods with the @Subscribe annotation

在打release包的时候遇到了这个问题,算是比较常见,记一下解决思路。本文介绍了出现这个问题的原因,以及出现问题时我的建议和我的思路,着急的可以直接看解决方案。异常Subscriber class xxx and its super classes have no public methods with the @Subscribe annotation遇到异常不要慌,其实已经提示的很明显了,指定了具体的class,且明确告诉你这个类没有@Subscribe注解。原因但其实知道了问题后,可能

2021-01-16 14:09:47 322

原创 Android MediaPlayer音频播放器详解

效果音频播放,是比较常见或常用的功能,比如音乐播放器、新闻播报、听书等等,而恰巧如果你想自定义一个音频播放器的话,本文一定对你有帮助!常用方法start() 开始播放pause() 暂停播放stop() 停止播放prepare() 资源准备prepareAsync() 异步准备,不阻塞UI线程seekTo(int msec) 定位到指定位置,单位毫秒isLooping 是否循环播放isPlaying 播放状态duration 总时长currentPosition 当前位置rel

2021-01-06 20:48:32 3541 2

原创 Android 修改系统音量及监听

效果修改系统音量这种操作还是挺常见的,一般在多媒体开发中都多少会涉及到。常用方法获取音频管理器mAudioManager = this.getSystemService(Context.AUDIO_SERVICE) as AudioManager获取媒体音量最大值mMaxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC)获取系统当前媒体音量mCurrentVolume = mAudioManager.

2021-01-05 19:25:27 203

原创 Android 修改系统屏幕亮度及监听

效果修改系统屏幕亮度这种操作还是挺常见的,一般在多媒体开发中都多少会涉及到。emmm 效果图好像看不出来变化。。不过不是很重要。。操作拆解上图中可以看到,分别有加减按钮和seekbar来控制亮度。后面会涉及到相关的事件。获取系统屏幕亮度 /** * 获取系统屏幕亮度(0-255) */ private fun getScreenBrightness(): Int { try { return Settings.Sy

2021-01-05 16:46:46 2938 3

原创 Android 硬布局item的高级写法

效果:这种布局应该是非常常见了,且写的比较多。今天简单探讨一下效果图中上下两种布局的写法。比较上下效果一致行数层级上部分1213下部分552下部分继续精简282可以看出,对比还是很明显的,精简到最后只有最开始的四分之一。上部分先看常规item写法,横向的LinearLayout嵌套三个子View,分别是左边的ImageView,中间的TextView,和右边的ImageView。然后每个横向的LinearLayout之间添加一个高

2020-12-21 19:37:52 2089 2

原创 Android 打开网页之CustomTabs

一般打开url有以下几种方式:调用默认浏览器用WebView用CustomTabsIntent默认浏览器的话,是跳转到别的app,我方app就切换到后台了,至于什么时候返回回来就不确定了,且在后台有被回收的风险,不利于业务开展,如果是打开浏览器之后就完成任务的情况,可以使用。WebView是我们比较常用的,如果页面可控,且需要交互的,还是建议使用webview的。CustomTabs在用户的默认浏览器中显示网页,相当于在自己的app中用默认浏览器打开网页,效果类似WebView,但使用起来比

2020-12-18 16:22:25 2294 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 120

原创 BottomSheetDialog 使用详解,设置圆角、固定高度、默认全屏等

效果MD风格的底部弹窗,比自定义dialog或popupwindow使用更简单,功能也更强大。其实细分来说,是BottomSheet、BottomSheetDialog、BottomSheetDialogFragmentBottomSheet与主界面同层级关系,可以事件触发,如果有设置显示高度的话,也可以拉出来,且不会影响主界面的交互。XML<?xml version="1.0" encoding="utf-8"?><androidx.coordinatorlayout.

2020-11-25 20:14:30 3475 7

原创 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 216

转载 Android SpannableString详细解析

文章目录什么是SpannableString?各种SpanForegroundColorSpan 前景色BackgroudColorSpan 背景色ClickableSpan 点击事件URLSpan 超链接MaskFilterSpan 模糊 浮雕RelativeSizeSpan 字体相对大小AbsoluteSizeSpan 字体绝对大小ScaleXSpan 字体x轴缩放StyleSpan 样式TypefaceSpan 字体TextAppearanceSpan 文字外貌UnderlineSpan 下划线Str

2020-10-29 15:32:13 194

原创 Android 服务协议隐私政策高亮可点击写法

实现效果:亦或者是在弹窗中显示,都是一样的。代码比较简单: private fun setText() { //拼接字符串 val spanBuilder = SpannableStringBuilder("同意") /** * 服务协议 */ var span = SpannableString("服务协议") //服务协议点击事件 span.setSpan(

2020-10-24 19:38:09 1935 5

原创 Android 全埋点解决方案

本文参考《Android全埋点解决方案》一书,并在实操中查漏补缺。前言为什么选择全埋点呢,因为传统的手动埋点虽然简单、扩展性强,但弊端也很明显:开发时间成本较高改动的时间成本也较高容易出现漏埋、埋错的情况代码侵入性强但也不是说全埋点就一定没有弊端,比如扩展性较差。经过调研,实际上都是以全埋点为主、手动埋点为辅的情况,从而达到比较理想的埋点效果。本文内容可能稍微有点长,但是很简单,别太长不看啊,最后有demo源码。页面一般来说我们需要的数据就是,用户在哪个页面干了什么,也就是.

2020-10-21 20:42:19 367

转载 比 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 210

原创 Android Studio 4.0 提交项目到GitLab

常规操作,但是AS4.0有一些改动,且提交过程不是很顺畅,所以记录一下。git环境就不说了,自己配置1,先忽略文件有些文件不是公用的是可以不用上传的,还有一些是编译的文件也不用上传。AS4.0以前,忽略文件是可以在settings-version control里面可视化操作的,但是升级AS4.0之后,这个设置没有了,但是我们可以在根目录的.gitignore文件里添加。*.iml.gradle.idealocal.properties.DS_Store/build*/build

2020-10-10 16:48:34 214

原创 Installation did not succeed。apk安装失败的一些解决办法

其实有挺多原因会导致安装失败的,所以解决办法也不尽相同,下面列举一些解决办法。一先查看手机环境,是否打开USB调试,是否允许安装应用,手机是否处于打开状态,黑屏状态下也是会安装失败的。二清除缓存并重启AS可以尝试同步重启手机。三重试安装,可能会在安装提示的时候点错了,导致安装失败。四删除.gradle文件夹、.idea文件夹,build文件夹。然后重新编译会自动生成,这个可能是因为升级了AS,或者改了某些配置导致的版本不对称,所以删除重新编译即可。五编译期间注意查看控制台中buil

2020-10-09 10:32:00 1992 5

原创 ‘annotationProcessor‘ dependencies won‘t be recognized as kapt annotation processors. Please change

‘annotationProcessor’ dependencies won’t be recognized as kapt annotation processors. Please change the configuration name to ‘kapt’ for these artifacts: ‘com.airbnb:deeplinkdispatch-processor:4.1.0’.简而言之,需要把annotationProcessor切换为kapt就可以了。切换前: api .

2020-10-08 16:04:02 827

原创 DSL element ‘android.dataBinding.enabled‘ is obsolete and has been replaced with ‘android.buildFeatu

DSL element ‘android.dataBinding.enabled’ is obsolete and has been replaced with ‘android.buildFeatures.dataBinding’.It will be removed in version 5.0 of the Android Gradle plugin.实际上就是换一种写法。原来: dataBinding { enabled true }现在: bu.

2020-10-08 15:29:38 1205 1

原创 Android识别模拟器,判断是模拟器还是真机

文章目录前言原理禁止模拟器安装apk代码识别验证最后前言对于android开发者来说,模拟器是开发工具,但是对用户来说,可能就是薅羊毛、找漏洞的赚钱工具。不管是活动风控还是内容保护等等其他的出发点,应要求可能会要识别Android模拟器,甚至禁止模拟器登录或后续操作。今天做个简单的探讨。原理识别模拟器的原理,其实就是找出模拟器和真机的差别,但是这些差别体现在哪呢,比如运营商、手机卡、蓝牙、各种传感器等等。但是现在的模拟器也是越来越厉害了,可以模拟不同品牌的不同型号的不同版本的手机,而且有蓝牙、

2020-09-25 17:28:36 2251

原创 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 830

转载 谈工作和学习中,所谓的主动性

转载于公众号:caoz的梦呓1、好奇心对自己所从事的领域,应该持续保持好奇,比如程序执行效率的底层逻辑是什么,比如产品用户反馈的真实心理是什么,比如运营业务数据波动的背后真相是什么,好奇心才会驱动你去不断追问细节,不断提升自己的认知能力。2、责任心这是老板的产品,这是老板的公司,没错。这是我的产品,这是我的公司,也要有这个责任心,你说老板没有多给你钱,我一直用nba球星的例子来说话,底薪球员就不用努力表现么?你努力的目的是什么,是下一份合同!你表现得够好,下一份大合同,现在的老板可能会给,他不.

2020-05-31 23:51:37 248 1

转载 学习方法分享

特别声明:原作者 liuyubobobo由于每个人的背景不同,擅长不同,每个人都有适合自己的不同的学习方法;与此同时,不同的领域,由于其本质不同,学习方法也应该是不同的。我坚信:每个人去寻找适合于自己的学习方法,是每个人一生的话题。别人叙述的所谓的“学习方法”,只能作为参考用。1、不要完美主义!我观察到的大多数同学犯得最最最最大的“错误”,就是在学习上“完美主义”。乃至后续很多其他...

2020-04-16 17:33:59 168

原创 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 491

转载 Android 10 适配攻略

文章目录准备工作1.Scoped Storage(分区存储)说明适配补充2.权限变化1.在后台运行时访问设备位置信息需要权限2.一些电话、蓝牙和WLAN的API需要精确位置权限3.ACCESS_MEDIA_LOCATION4.PROCESS_OUTGOING_CALLS3.后台启动 Activity 的限制4.深色主题1.手动适配(资源替换)2.自动适配(Force Dark)手动切换主题监听深色...

2020-03-20 11:08:34 518

转载 写一篇最好懂的HTTPS讲解

文章目录前言简述加密传统传输的问题对称加密非对称加密CA机构个人总结前言https这项技术现在已经应用得非常广泛了。随着苹果、Google等各大互联网领头企业纷纷在自己的操作系统、浏览器等主流产品中强制要求使用https,http的淘汰也正式进入了倒计时。其实https对于客户端开发人员来说并没有什么需要特别注意的地方,因为代码和写http请求时并没有什么两样。但也正是因为这个原因,导致许多...

2020-03-05 16:48:20 131 1

转载 全新的视图绑定工具 — ViewBinding 使用指南

前言我们在Android开发的过程中总是需要获取XML布局中的ViewId,以便给其赋值进行显示,早期我们只能使用 findViewById 这个API,会导致很多的模版代码出现。2013年左右Android界大神 Jake Wharton开源了Butter Knife框架,通过Bind(“viewid”)方式方便开发者获取ViewId。近两年由于谷歌对Kotlin的支持,我们开始使用 Andr...

2020-03-02 17:24:29 663 3

so文件(全平台)so

so文件(全平台),so文件(全平台),so文件(全平台),so文件(全平台),so文件(全平台),so文件(全平台),

2020-08-13

代码版本控制工具

TortoiseSVN TortoiseGit

2016-12-19

yechaoa的留言板

发表于 2020-01-02 最后回复 2020-04-04

空空如也

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

TA关注的人 TA的粉丝

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