- 博客(101)
- 资源 (51)
- 收藏
- 关注
原创 OkDownloader,基于 OkHttp的现代化开源下载框架
OkDownloader是一款基于 OkHttp 编写的适用于Kotlin/Java/Android平台的开源下载框架,可以运行在任何JVM 机器上
2023-08-01 08:30:00
519
原创 Compose自定义条形进度条
Compose自定义View其实比View系统更方便简单,比如接下来本文要介绍的就是使用Compose实现View系统中常见的条形进度条。
2022-06-21 23:24:20
1049
原创 Android性能优化之布局优化
在开始性能优化前我们先需要知道从哪些方面入手,本篇文章介绍的布局优化可以从如下几个方向入手减少布局树的层级减少布局树中View的数量减少单个View的绘制时间(将在下一篇文章中归到绘制优化部分)提高布局的复用性减少布局树的层级我们知道在Android中View布局是一个树的数据结构,这个树里面的元素是我们编写或定义的View或ViewGroup,而每个ViewGroup元素又可以有View或ViewGroup子元素,这样ViewGroup嵌套子View,子ViewGroup又嵌套子View形
2020-09-20 23:49:09
773
原创 【Android AAC】第三篇 ViewModel源码解析
前言先看一个ViewModel的使用例子,这里使用Kotlin语言(读者不该困惑于语言,主要是看用法,Java的类似,不懂欢迎留言):class ShareViewModel : AndroidViewModel { private val userLiveData:MutableLiveData<User> = MutableLiveData() constr...
2019-08-14 16:07:21
1129
原创 【Android AAC】第二篇 LiveData的源码解析
前言首先看一下如下一个简单的使用例子,本文范例使用Kotlin语言进行介绍,Java版的类似,不懂的可以留言问我哈。// 1.创建LiveDatavar loginLiveData:MutableLiveData<LoginEntity> = MutableLiveData<LoginEntity>()// 2.观察LiveDataloginLiveData.ob...
2019-08-09 17:28:27
463
原创 【Android AAC】第一篇 Lifecycle的源码解析
前言AAC是Android Architecture Components的缩写,翻译过来就是Android架构组件的意思,是Google IO 2017大会期间发布的一组架构组件,它可以用来帮助开发搭建更加简单便捷的APP架构。AAC里面涉及到了LiveData,ViewModel,其中LiveData的工作需要依赖于Lifecycle,所以本篇文章将介绍Lifecycle的工作原理,并从源码...
2019-08-08 20:50:09
539
原创 Gradle私服上传自己的库项目
nexus私服(3.14)下载地址:https://www.sonatype.com/download-oss-sonatype安装:管理员身份运行cmd,进入nexus bin目录,nexus /install nexusnexus /run(之前版本用bat启动,nexus start启动)修改配置(etc目录nexus-default.properties)如:修...
2018-12-22 22:36:22
2194
原创 Android沉浸式状态栏
在使用沉浸式状态栏时需要注意设置的沉浸颜色为白色还是其他深色的区别1. 状态栏字体图标黑色(深色)// 5.0以上系统状态栏透明if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = getWindow(); window.clearFlags(WindowManager....
2018-12-14 17:00:57
355
原创 Android自定义圆角矩形ImageView,支持Glide加载图片及颜色填充
前言: 之前用到圆角的情况大都是自定义一个shape背景drawable及用到v7包下的CardView包裹View实现圆角矩形效果,还有就是在用户圆形头像的时候需要使用到圆角矩形(圆形可以看做是特殊的圆角矩形),诸如Button,Editext,TextView的圆角矩形颜色背景可以用shape实现,但是ImageView Res圆角还没用到过,它就不能简单地设置一个圆角矩形shape作为背...
2018-05-14 11:43:40
5768
原创 Android自定义PopupWindow,高仿炫酷的IOS对话框
前言: 最近在使用IOS系统的过程中发现IOS底部弹出框甚是漂亮,大气,上档次,于是乎就想啊能不能在Android中实现类似的对话框呢?你说,这不是废话吗,除了一些极少数的系统级的不能模仿外(版权)还有啥不能依瓢画葫芦的呢,所以啊,这篇文章将介绍如何在Android中实现高仿IOS对话框效果,先上图,给大家养养眼:大家在看到上面的对话框时有没有想到简单的实现思路呢?我这里给出的思路是我...
2018-05-12 20:39:59
1494
原创 Android自定义Dialog,炫酷主流的加载对话框
前言 最近开发中用到许多对话框,之前都是在外面的代码中创建AlertDialog并设置自定义布局实现常见的对话框,诸如更新提示等含有取消和删除两个按钮的对话框我们可以通过代码创建一个AlertDialog并通过它暴露的一系列方法设置我们自定义的布局和style,但有时候系统的AlertDialog并不能实现更好的定制,这时,我们就想到了自定义Dialog。通过查看AlertDialog的类结构...
2018-05-12 11:59:14
5500
1
原创 Android自定义RecyclerView分割线,打造无边缘分割线
前言: 现在的RecyclerView几乎已经完全取代ListView和GridView了,已经几年没使用ListView和GridView了,想当年还需要自己在getView方法中复用convertView。而现在的RecyclerView一出生就被设计成convertView复用的,尽管你不想复用(才怪)。RecyclerView功能如此强大的同时就会面临许多需求,如给RecyclerVi...
2018-05-02 22:01:58
4066
1
原创 Android自定义ViewPager图片指示器,兼容实现底部横线指示器
前言 记得以前自己使用过的ViewPager Indicator有JakeWharton大神的开源库ViewPagerIndicator,v4包自带的PagerTitleStrip以及Android Support Design库的TabLayout。它们基本上可以实现项目中常见的ViewPager指示器的需求,除非你的项目有特色的指示器需求,如指示器不再是tab底部横线,而是一个三角形或是其...
2018-04-22 16:05:40
4356
1
原创 Android自动填充短信验证码
前言 短信验证码获取并自动填写现在已经成为一个人性化App的标配了,这篇文章将实现一个短信验证码获取并自动填写的demo。其实就是读取指定号码的短信并提取出验证码,然后赋值给EditText显示。demo效果图:读取短信 Android系统在接受到一条短信的时候会发出一条Action为android.provider.Telephony.SMS_RECEIVED的有序广播,因此我们读取短信的验证码只
2017-09-28 15:28:23
5176
1
原创 Android开发技巧之使用自定义注解
前言 一些优秀的开源框架如比较早的xUtils网络加载框架及现在最新版本的greenDao 3.X ORM框架支持注解,注解的使用可以使得我们的代码架构变得更加清晰,同时也更能体现出面向对象语言的继承的特征及反射机制的强大。我们在Android开发过程中可以使用注解来优化我们的代码结构。Java注解简介注解Annotation其实是一种元数据,不包含业务逻辑,它的作用是用来给类,接口,域等提供数据。
2017-09-28 10:17:11
1334
原创 Android视图动画浅析
视图动画 视图动画共有四种,分别为透明度,旋转,平移,缩放动画,如同名字所说一样,它是一种视图上的动画,改变的只是视觉上的效果,实际上View的属性如位置,大小,透明度等并没有受到动画的影响。下面将演示四种视图动画的代码及xml定义使用。代码定义:public void alpha(View v){ AlphaAnimation alphaAnimation = new AlphaAnima
2017-09-19 18:54:44
1013
原创 Android使用ViewDragHelper实现侧滑菜单(一)
前言 对于处理View的滑动,除了Android实现滑动的几种方式写到的四种外,Android v4包中还提供了一个ViewDragHelper类来帮助我们更加方便地处理滑动事件,ViewDragHelper使得View与View之间的滑动交互更加简单方便。不过在学习ViewDragHelper处理滑动事件前需要掌握View的事件处理机制,可以参考:Android事件的分发与拦截机制。ViewDra
2017-09-16 09:56:48
1546
原创 Android实现滑动的几种方式
前言 View的滑动对于View交互性及效果有很大影响,我们可以通过5种方式来实现View的滑动,准确地说是View位置的改变。要改变View的位置,首先我们需要了解Android的坐标系,因为View的是通过坐标来定位的。绝对坐标系 Android系统中,屏幕的最左上角为坐标原点,如下图所示。屏幕最左上角的点为坐标原点,向右向下分别为x轴和y轴视图坐标系 视图坐标系是在View的层级体系中使用到的
2017-09-14 15:24:24
6307
原创 Android事件的分发与拦截机制
前言 Android为我们提供了丰富的View及ViewGroup控件,使得我们可以轻松的地完成Android应用界面的绘制,同时还可以自定义精美的View控件。绘制一个界面往往需要众多的View及ViewGroup不断嵌套,由于View可能需要与用户交互,如Button响应用户的点击,EditText响应用户的输入,而ViewGroup也可以响应事件,当多个ViewGroup和View嵌套的时候就
2017-09-11 16:00:47
2043
原创 CTS,GTS,CTS Verifier失败项总结(持续更新)
在CTS,GTS,CTS Verifier测试中经常会遇到许多问题,需要寻找相应的解决方法以便通过测试,出来IP V6及Google 豁免项外不允许出现其他问题。那么其他问题通常又会是由以下一些原因导致的。软件问题(软件人员配置或是定制Framework导致)驱动问题(如Camera2问题)测试方法问题网络问题(有些项需要使用静态ip地址测试,有些需要使用动态ip)签名问题(找软件帮忙)
2017-09-07 14:04:21
9118
原创 Android N 多窗口模式
前言 在智能手机更新换代越来越快,手机屏幕越来越大,手机可以做的事情越来越多,人们已经离不开智能手机了,甚至有的人开始在用手机办公了。在大屏幕手机上,如果一个手机可以一边播放视频,一边上着网,那种体验是非常爽的。终于,在Android 7.0(N)(API 24)引入了多窗口(Android N 的 Nexus Player还有画中画)的支持,也就是分屏显示,可以是上下排列,也可以是左右排列,可以在
2017-09-01 16:47:59
2136
1
原创 Android运行时权限
前言: Android 6.0(api23)引入了运行时权限,它允许应用程序在运行的时候请求权限而不像5.1及更低版本一样在安装的时候请求权限。这样一来,需要请求危险权限(涉及到用户隐私…)的应用在安装的时候就不需要请求权限了,而5.1以前如果安装的时候请求的权限没有通过的话应用就安装不了。同时,这种运行时权限可以由用户随时在设置->应用信息中开启或关闭某项权限,即使某个应用刚才还拥有读取联系人的权
2017-08-30 19:09:57
840
原创 浅谈BroadcastReceiver
前言: 广播作为Android四大组件之一,类似于现实生活中的广播,经常用来传递及处理消息,有时候我们的应用程序需要在特定的情况下执行不同的逻辑,如系统开机,网络状态的变化,电源电量的变化…,这些都需要通过广播来实现。不仅如此,有时候我们还需要为我们的程序自定义广播,实现相应的逻辑功能。广播分为标准广播,有序广播,注册又有动态注册及静态注册,按作用域也有全局广播及本地广播。1、广播的静态注册与动态注
2017-08-29 21:06:09
512
原创 Android百分比布局库
前言: Android在6.0(api23)引入了百分比布局库,这个库以support包的形式供我们使用。以前的那几种布局中要实现等比分割布局只有LinearLayout的layout_weight属性可以轻松实现,现在不同了,有了这个百分比布局库我们可以更加方便灵活地百分比分割我们的布局,从而使得我们的界面编写更加方便。Android百分比布局库中提供了PercentFrameLayout和Per
2017-08-29 19:42:27
1243
原创 Activity的四种启动模式
前言: Activity为什么会有启动模式? 我们可以想想Activity作为Android四大组件中使用最多的一个,经常需要使用Activity将界面显示给用户,这也就设计到了Activity的频繁创建新的Activity(切换Activity)或是已经启动的Activity再次启动(切换回来)。尽管Activity有完整的生命周期回调,但系统又是通过什么来管理众多的Activity的呢?答案是A
2017-08-26 16:25:14
560
原创 Activity之间数据相互传递
不同的Activity之间可以相互传递数据,针对以下两种情况可以有两种方法传递数据,相同的地方都是通过Intent进行数据的传递。1、前后Activity的数据传递前一个Activity(A)启动后一个Activity(B)可以在intent中通过putXXX方法添加相应的数据,B则可以通过getIntent方法来得到这个intent,从而取得数据。而当B要向A传递数据的时候就需要通过Ac
2017-08-25 17:43:22
3981
原创 【Android】DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs
问题描述:Android Studio在安装应用的时候弹出一个安装失败需要卸载应用的窗口,点击OK后Run控制台显示DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs错误。解决办法:该问题是因为手机安装内存不足,卸载一些软件重新运行安装程序即可。
2017-08-25 16:01:09
723
原创 Android开源框架greenDAO 3.X的使用
前言 greenDAO是greenrobot Open Source Libraries的一个开源框架,同时greenrobot Open Source Libraries还有一个优秀的开源框架EventBus。greenDAO是用来替代Android原始的SQLite数据库操作以便节约开发者开发成本的一款优秀的ORM(object/relational mapping)框架,将SQLite数据库的
2017-08-19 05:40:08
1143
原创 Java实现常见的排序算法
1、冒泡排序基本思想:比较两个相邻的数,如果满足条件则交互顺序(从小到大还是从大到小),这样数组中的元素就会像气泡一样由底部上升到顶部。Java代码示例:/** * @param arr 待排序的数组 */public static void bubbleSort(int[] arr) { for(int i=1;i<arr.length;i++) { for(int
2017-08-17 09:03:42
281
原创 Android反编译,修改apk启动页
前言 不得不说自从有了IDE之后,很多原本很基本的开发命令开发步骤似乎被人们慢慢淡忘了,特别是Android开发,先是eclipse+adt作为Android开发的IDE,到现在的Android Studio2.3.3的功能可谓是如此得强大,编译速度越来越快。然而很多基础的东西却被这强大的IDE悄悄地替我们完成了,比如apk的编译,打包,签名设计,而开发者需要做的仅仅是在GUI界面点击编译,打包按钮
2017-08-14 19:18:49
11880
原创 面向对象的六大原则
一、 单一职责原则 正如字面上所说,这一原则体现在“单一”二字,描述的是一个类的职责应该是单一的,与该类无关的功能或者完全不一样的功能不应该出现在该类中,而需要将该类所具有的功能独立出来。而这个类中仅有的是一组相关性很高的函数,数据的封装。
2017-08-10 16:27:15
308
原创 Android Preference初探,另一种布局方式
记得android五大数据存储中有个SharePreferences,其他四种分别是:SQLite数据库ContentProvider(内容提供者)文件存储网络存储这里简单回顾一下SharePreference是的使用:// 1. 得到sharedPreferences,第一个参数指定SharePreference保存的xml文件的文件名,第二个参数是SharedPreferences模式
2017-03-17 20:09:08
5545
原创 Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enable
问题描述: 在android studio运行app的时候出现这个问题导致android studio无法运行module。解决方法: 根据错误描述,使得ADB integration可用就行,即android studio:Tools->android->Enable ADB integration前面打上勾,如下图:
2016-05-02 21:55:39
1031
原创 Android异步更新UI的几种方法
前言:我们知道在android开发中不能在非ui线程的其他线程中更新ui,但是,有的时候我们需要在代码中执行一些诸如访问网络、查询数据库等耗时操作,为了不阻塞ui线程,我们时常会开启一个新的线程(工作线程)来执行这些耗时操作,然后我们可能需要将查询到的数据渲染到ui组件上,那么这个时候我们就需要考虑异步更新ui的问题了。android中有下列几种异步更新ui的解决办法:Activity.runOn
2016-04-26 12:37:54
12790
1
原创 Android5.0 xUtils报错IOException: stack size 1036kb
这时xUtils低版本在android5.0上的一个bug,将xUtils的jar包替换成最新版本的就行,目前最新版本为2.6.14,下面是下载地址:GitHub下载地址:https://github.com/wyouflf/xUtilscsdn下载地址:xUtils-2.6.14
2016-04-16 17:24:12
1139
原创 c++类型转换
前言:c++提供了四种类型转换,分别是static_cast,reinterpret_cast,dynamic_cast,const_cast。它们都有各自的运用场景.语法形式(四种都一样):Type dist = *_cast<Type>(src);1. static_cast(静态类型转换) c/c++中自动类型转换的数据都可以使用static_cast进行转换,这种类型转换使得c++编译器在编
2016-04-16 12:05:02
776
原创 c++类模板遇上static关键字
前言: 在c++中我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。 在c++中,我们不能把静态成员放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从
2016-04-10 21:42:42
15019
3
原创 c++函数模板和类模板
一、函数模板定义形式:template ...> return-type func-name(parameter list){ // 函数的主体} 说明:type1和type2…是占位符,用来泛指任意类型,如T,K…。template和typename是关键字;函数模板的调用:显示类型调用自动类型推导例子:#include using namesp
2016-04-10 21:42:11
956
原创 c++友元函数及运算符重载
前言: c++的类和java的类机制着实不大一样,不仅仅是语法,还包括一些特殊的东西,如c++用友元函数来破坏类的封装性,使得外界(友元函数体)可以访问类的私有属性,而java呢,java则可以通过反射机制类在类的外部访问类的私有属性,从而破坏类的封装性,而不仅这点,java中没有什么运算符重载,而c++中提供了运算符重载技术使得我们自定义的类型(类)也可以想基本数据类型一样进行的运算符(+,-,*
2016-04-10 21:39:53
3730
1
原创 python数据类型
1. 数据类型分类python大约有以下8种数据类型,分别是:Number(数字)String(字符串)List(列表)Tuple(元组)Sets(集合)Dictionary(字典)None(空类型)Object(对象类型)Number类型: Python3 中支持 int、float、bool、complex(复数),在Python 3里,只有一种整数类型 int,表示为长整型,
2016-04-08 21:00:38
7546
2
com.lifesting.tool.encoding_1.0.0.jar
2015-10-18
test_from_to_patch
2020-11-13
CTS总结表格
2017-09-07
jsoup-1.8.3.zip
2015-12-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人