Android
JasonChen嘉生
默默奋斗的owner
展开
-
Android RecyclerView 中多Item的EditText焦点混乱,数据错乱的解决方法(更新)
最近在做毕业设计,使用了RecyclerView来做了以下个人资料的编辑界面。RecyclerView中包含了多种不同的Item,例如图片里面的 姓名,公司,部门,职位,邮箱的Item 里面都包含一个EditText。 RecyclerView中EditText的监听处理这个界面的主要逻辑是监听每个EditText的输入,然后保存到个人对象里,最后保存到服务器上。RecyclerView中Item原创 2016-11-28 10:19:12 · 15832 阅读 · 4 评论 -
Android 计步传感器的实现
在Android4.4之后的版本中,Android在硬件中支持内置计步传感器。例如微信运动,支付宝运动等常用软件都是直接调用了Android中的Sensor传感器服务,从而获取到每日的步数。要完成计步传感器的调用,需要了解Sensor,SensorManager,SensorEventListener,SensorEvent四个类。SensorSensor即传感器,该类的路径为android.har原创 2017-05-27 15:42:38 · 17312 阅读 · 5 评论 -
Android App包瘦身优化实践
本文转载自美团技术博客:Android App包瘦身优化实践随着业务的快速迭代增长,美团App里不断引入新的业务逻辑代码、图片资源和第三方SDK,直接导致APK体积不断增长。包体积增长带来的问题越来越多,如CDN流量费用增加、用户安装成功率降低,甚至可能会影响用户的留存率。APK的瘦身已经是不得不考虑的事情。在尝试瘦身的过程中,我们借鉴了很多业界其他公司提供的方案,同时也针对自身特点,发现了一些新转载 2017-05-03 13:18:01 · 868 阅读 · 0 评论 -
Android Studio Gradle环境变量配置
Gradle是Android Studio用来构建和管理项目的一个插件,采用了基于Groovy的内部领域特定语言。Android Studio已经帮我们封装了很多Gradle命令,还可以通过控制台Console来输入Gradle命令执行操作,要通过控制台的方式来运行就必须配置Gradle系统环境变量。一般来说Android Studio默认下载Gradle包的路径为: C:\Users\用户名.g原创 2017-04-17 08:49:31 · 18947 阅读 · 1 评论 -
Android Studio Gradle命令和配置
Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言,建议可以先熟悉一下Groovy脚本。 在线文档Gradle命令:常用命令:gradle明明一般是./gradlew +参数, gradlew代表 gradle wrapper,意思是gradle的一层包装,大家可以理解为在这个项目本地就封装了gradle,即gradle wrapper转载 2017-04-17 08:16:59 · 4099 阅读 · 0 评论 -
Android RecyclerView上拉加载更多的实现和源码分析
上一章介绍了RecyclerView的下拉刷新功能的实现和源码分析。在一个RecyclerView完整的功能中,下拉刷新和上拉加载是必须包含的,所以本节就介绍上拉加载更多的实现和源码分析。需求分析上拉加载更多也就是拉到RecyclerView底部,再上拉就会显示一个正在加载更多信息,如下图所示: 当上拉加载没有更多数据时,就显示没有更多的提示信息,如下所示: 上拉加载更多 比 下拉刷新更简单原创 2017-04-06 15:53:55 · 2161 阅读 · 0 评论 -
Android RecyclerView下拉刷新的实现和源码分析
目前RecyclerView是主流的列表显示控件,RecyclerView支持的特性很多,但是并没有自带官方的下拉刷新功能。谷歌提供了一个SwipeRefreshLayout的下拉刷新控件,就是一个小圆圈在转动,自定义效率有限,并不能满足日常的需求开发。现在github上也有很多RecyclerView的衍生控件实现了自定义下拉刷新效果,它们的实现原理各有同,总的来说,目前主要可以实现下拉刷新效果的原创 2017-04-04 23:29:35 · 1134 阅读 · 0 评论 -
Android Freeline加速编译App方案 使用和总结
Freeline简介在Android Studio还没推出Instant Run功能之前,每次修改Android 工程项目时都要将整个项目重新编译一次,然后再将资源和代码文件打包成APK文件传输到手机上安装运行。这个过程是非常耗时间的,在配置较低的PC上一般需要高达3分钟以上,配置较高的PC最低也需要1分钟以上的时间。程序猿每天无数次修改代码然后编译运行都要浪费很多宝贵的时间,之后在Android原创 2017-03-06 23:21:04 · 3558 阅读 · 0 评论 -
Android MVVM架构模式 详解和综合运用(二)
绑定事件处理程序DataBinding的一个关键就是View和ViewModel可以关联在一起,实现双向交互。例如在View层触发了一个事件,例如点击onClick,DataBinding可以在layout布局文件中的属性@{ }表达式中来处理这个事件,而不用自己去设置监听器来处理事件。例如,View.onClickListener中有一个方法是onClick,所以在view元素节点上有对应的属性a原创 2017-02-27 13:27:34 · 1311 阅读 · 0 评论 -
Android MVVM架构模式 详解和综合运用(一)
Android App架构设计Android App架构设计的目的是通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合。这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续的测试以及定位问题。但设计不能违背目的,对于不同量级的工程,具体架构的实现方式必然是不同的,切忌犯为了设计而设计,为了架构而架构的毛病。 Android的架构设计从早期原创 2017-02-26 20:06:33 · 1005 阅读 · 0 评论 -
Android ButterKnife 注解框架的使用详解和原理分析
ButterKnife简介ButterKnife是JakeWharton大神开发的一个开源库,官方对这个库的介绍为: Butter Knife Field and method binding for Android viewsButterKnife是一个使用注解方式来为Android中的View视图绑定字段和方法,能通过自动解析注解来搜索资源文件并赋值给Activity中的字段,如使用原创 2017-03-08 00:16:17 · 4409 阅读 · 0 评论 -
Android OkHttp官方Wiki之Calls
Http基础概述Http客户端的工作就是接收用户的请求Request和产生返回结果Response。Requests 每一个Http请求都包含了URL,请求方式(GET,POST),请求头,请求体。请求体中包含了特定数据类型的数据流。 Responses 每一个响应包含了响应状态码,响应头,响应体。Rewriting Requests重写请求当使用OkHttp进行HTTP请求时,OkHttp会原创 2017-05-27 23:58:31 · 484 阅读 · 0 评论 -
Android OkHttp官方Wiki之Connections
虽然用户只使用URL发起请求时,但是OkHttp会使用URL,Address和Route路由来与服务器进行连接。URLsURL统一资源标识符是用来连接HTTP和互联网的最基本的要素。URL除了为网络上的所有东西提供一个通用,分散的命名方案,同时也能指定如何访问网络资源。一个URL的组成成分包括了Scheme方案,Username and Password,Host主机名,Port端口,Path路径,原创 2017-05-28 18:18:56 · 497 阅读 · 0 评论 -
Kotlin中反射机制的使用语法
反射机制概述Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java 反射机制的功能 在运行时判断任意一个对象所属的类。 在运行时构造任意一个类的对象。 在运行时判断任意一个类所具有的成员变量和方法。 在运行时调用任意一个对象的方法原创 2017-10-15 10:56:57 · 8560 阅读 · 2 评论 -
Android 创建CircularReveal揭露动画的实现
在Android 5.0及更高的版本中,加入了一种全新的视觉动画效果,就是揭露动画。揭露动画在系统中很常见,就是类似波纹的效果,从某一个点向四周展开或者从四周向某一点聚合起来,本文实现的效果如下所示,可以用在Activity里面的View动画效果,也可以使用在Activity跳转过渡动画中: 使用揭露动画非常简单,Android Sdk中已经帮我们提供了一个工具类ViewAnimationUtil原创 2017-10-21 11:20:23 · 2300 阅读 · 0 评论 -
Android TV RecyclerView焦点移动飞框的实现
上一篇文章讲了 Android TV 焦点移动飞框的实现 这一篇文章主要在RecyclerView中实现焦点移动飞框,支持横向和竖向列表。实现效果如下图所示: RecyclerView视图绑定在Android TV端使用RecyclerView跟手机上的一样,都是通过绑定ViewHolder来实现视图的绑定,首先需要创建一个基类继承RecyclerView.ViewHolder,里面包含一个set原创 2017-10-02 16:10:22 · 2991 阅读 · 1 评论 -
Android TV 焦点移动飞框的实现
目前国内传统厂商和互联网厂商所开发的Android智能电视的UI都很类似,其中最常见的就是获得焦点的选中项飞框动画效果的实现了,看上去动画效果很炫酷,能够正确的指引使用者当前所选择的条目。Android电视和Android手机有很大的区别,Android手机带有触摸屏,一般不用特别指示用户所选中的项;而Android电视则不同,不带有触摸屏,一切操作都需要通过遥控或者手机(带红外线)来实现远程操控,原创 2017-09-25 23:59:35 · 3125 阅读 · 1 评论 -
Android ScaleGestureDetector缩放手势识别
ScaleGestureDetector在Android中对于手势识别操作可以使用GestureDetector类来进行处理,对于缩放手势,则提供了对应的ScaleGestureDetector类。 public class ScaleGestureDetector extends Object ScaleGestureDetector 使用类内置的MotionEvents来识别探测缩原创 2017-06-14 20:01:23 · 12041 阅读 · 1 评论 -
Android GestureDetector手势识别
GestureDetectorCompat在View与用户的交互处理中,通常可以采用重写View的onTouchEvent方法来判断处理手势的一些操作,这种方式需要开发者自己处理手势的一些数据判断,在简单的手势例如上下左右滑动之类容易处理,遇到一些复杂的手势操作就很难判断处理。Android的View包中给我们提供了GestureDetector手势处理类来帮助开发者来处理复杂的手势操作事件。原创 2017-06-12 22:38:45 · 1749 阅读 · 1 评论 -
Android Fragment切换动画的2种实现方式
Fragment切换动画在Activity跳转之间可以设置动画效果,例如平移,渐变,旋转等动画,当然在Fragment中也可以设置切换的动画效果,可以达到跟ViewPager切换动画类似的效果。在Fragment中设置自定义切换动画主要分为了两种情景,一种是使用 android.app.Fragment包里面的Fragment类时,FragmentManager里面的FragmentTransact原创 2017-06-22 23:30:27 · 36294 阅读 · 3 评论 -
Android ViewPager切换动画PageTransformer
PageTransformerViewPager的默认切换视图的动画是平移方式,如果希望能改变默认的动画效果,增加淡入淡出,缩小放大等效果时,可以实现ViewPager.PageTransformer接口,并将它设置给ViewPager。 public interface PageTransformer { /** * Apply a property tra原创 2017-06-17 21:46:50 · 2037 阅读 · 0 评论 -
Android OkHttp官方Wiki之HTTPS
OkHttp试图平衡两个相互冲突的问题: 尽可能多地连接到主机。其中包括运行最新版本的boringssl的高级主机,以及运行较旧版本的OpenSSL的过时主机。 安全连接。这包括使用证书和使用强密码保护交换数据的隐私,从而与远程WEB服务进行验证。在与HTTPS服务器进行连接时,OkHttp需要知道需要提供哪个TLS版本和密码组。客户端如果想要最大化连接性则需要包括过时的TLS版本和弱设计的密码原创 2017-05-29 22:17:27 · 727 阅读 · 0 评论 -
Android OkHttp官方Wiki之Interceptors拦截器
在OkHttp中Interceptors拦截器是一种强大的机制,可以监视,重写和重试Call请求。下面是一个简单的拦截器,它记录发出的请求和返回的响应。class LoggingInterceptor implements Interceptor { @Override public Response intercept(Interceptor.Chain chain) throws IOExc原创 2017-05-29 18:54:03 · 1805 阅读 · 0 评论 -
Android OkHttp官方Wiki之Recipes使用方法
本文将演示如何使用OkHttp来解决常见问题,了解每件事是如何一起工作的。Synchronous Get 同步Get下面的代码将下载一个txt文件,打印它的响应结果的响应头部,并将它的响应体作为字符串打印出来。 private final OkHttpClient client = new OkHttpClient(); public void run() throws Exception {原创 2017-05-29 15:37:33 · 466 阅读 · 0 评论 -
Android 侧边字母导航栏的实现
现在很多App的地区选择或者联系人列表都包含了一个位于最右侧的字母导航栏,通过点击侧边字母导航栏就可以快速定位到列表中的选中字母开头的Item位置了。Android并没有提供这一控件,那么我们就只能通过自定义一个View来实现了。完成后的效果如下图所示: 图中的实现效果有两种状态,一种是点击或者滑动后,View的背景是灰色,字母是白色的,选中项的字母是绿色的,并会在PopupWindow中显示字母原创 2017-01-23 18:15:26 · 2485 阅读 · 0 评论 -
Android MVVM架构模式 详解和综合运用(四)
DataBinding结合RecyclerView使用在日常的开发中,使用最频繁的组件莫过于列表控件了,例如RecyclerView。DataBinding库也添加了对RecyclerView的adapter的支持,因为adapter是用来管理和分配RecyclerView中数据的组件。 使用DataBinding来开发RecyclerView很简单,首先创建一个item的布局,在这个布局中声明一原创 2017-03-01 10:54:25 · 647 阅读 · 0 评论 -
Android 使用多线程来做多文件上传Or下载
在Android中当需要上传或者下载多个图片或者文件到手机时,往往需要开启多个线程工作来提高效率。多线程的调度就需要用到线程池了,由于Android是基于java语言实现,所以Android中用到的多线程跟java中的多线程是一样的。下面介绍下java的线程池。线程池分类 (1)newCachedThreadPool 创建一个可缓存线程池,如果线程池线程数量超过处理需要,可灵活回收空闲线程原创 2016-12-27 16:47:59 · 8172 阅读 · 6 评论 -
Android 扩展RadioButton 灵活控制drawable的大小
android系统自带的radioButton当设置drawableTop ,drawableBottom,drawableLeft,drawableRight时,drawable的大小很难进行控制。一般在xml布局文件中没法进行设置,但是可以通过代码进行动态控制,这样的做法是灵活性太差了。在activity中动态设置radioButton中drawable的大小:private RadioButt原创 2016-12-09 16:14:53 · 3971 阅读 · 2 评论 -
Android Git 版本控制初识
版本控制版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定项目版本的系统。通过版本控制系统,可以为每个版本创建一个快照,并且填写相关的记录信息,这样便于你后续回退到这个版本。而你所有的修改,提交都会在版本系统中留下记录,这样就有更多的信息能够定位特定的版本。初识GitGit属于分布式版本控制系统,是目前世界上最先进的分布式版本控制系统,它的特点是简单易用,功能强大,速度快。分布式相比于集中式原创 2016-11-22 20:02:48 · 338 阅读 · 0 评论 -
Android Studio Git版本管理 配置
Git安装Git官方下载地址: http://git-scm.com/download/ 下载后安装到个人指定目录,之后的安装配置要求全部按默认值安装。Android Studio Git配置1首先打开Android Studio,然后打开你的项目,点击左上方的File - Setting 2打开Setting 选择Version Control - Git 选择Path to Git e原创 2016-11-22 20:34:13 · 849 阅读 · 0 评论 -
Android中实现全屏的 三种方式
1AndroidManifest.xml中配置activity的Theme这种情况下activity必须继承自Activity,而不能是AppCompatActivity,因为AppCompatActivity中并不支持 Theme.NoTitleBar.Fullscreen 这个主题。 <application android:allowBackup="true"原创 2016-11-23 09:01:29 · 2130 阅读 · 0 评论 -
Android 设置TextView字体Color Selector的正确方式
首先区分drawable目录下和color目录下的selector区别。 drawable目录下主要是设置android:drawable属性的,主要用来设置图片和背景色的,没有android:color属性。 color目录下主要是用来设置android:color属性的,主要是用来设置颜色方法的。使用时必须自己在res目录下创建一个color文件夹,然后在里面创建颜色selector文件原创 2016-11-23 19:01:06 · 7530 阅读 · 2 评论 -
Android RecyclerView 真正的布局刷新的正确方式
在平时使用RecyclerView时,当想进行布局刷新时,我们通常会调用notifyItemChanged(int positon)进行布局刷新,如果item中图片的话,那么刷新就会出现闪烁,这是怎么回事了? 原因就是notifyItemChanged(int positon)是刷新整个item视图的,也就是重新调用onBindViewHolder方法进行item中所有控件的刷新,这自然会造成图片的原创 2016-12-05 13:03:22 · 45442 阅读 · 4 评论 -
Android RecyclerView中实现ChecckBox单选的正确方式
以前使用recyclerView时,如果item中有单选框需要选中,一般的实现方式是创建一个boolean类型的ArrayList用来存储列表中每个item的checkBox是否选中,设置一个标志位mCurrentPosition来记录当前被选中的checkBox的item的position,然后在每次点击item时,设置ArrayList的list中mCurrentPosition(也就是上一次选原创 2016-12-05 12:04:18 · 14858 阅读 · 4 评论 -
Android 事件分发机制总结
Android事件分发机制原创 2016-11-02 14:58:28 · 543 阅读 · 0 评论 -
AysncTask 源码和底层原理总结
AysncTask 源码和底层原理总结原创 2016-11-02 15:14:35 · 588 阅读 · 0 评论 -
Android Broadcast广播总结
Android Broadcast广播总结原创 2016-11-02 15:32:01 · 695 阅读 · 0 评论 -
Android PopupWindow 使点击区域外不消失
默认的popupWindow点击区域外会使popupWindow自动dismiss,如果有一个点击区域外使popupWindow不自动dismiss的需求,该怎么办呢?首先来看popupWindow的两个重要的boolean属性mFocusable和mOutsideTouchable。 mFocusable是用来判断当前的popupWindow是否获取焦点,可以通过setFocusable(boo原创 2016-11-26 19:05:10 · 22902 阅读 · 6 评论 -
Android 实现点击 动态全屏显示
在很多APP应用中有些需求是点击实现Activity全屏显示来显示更多的信息,比如点击图片全屏显示等待,例如图片的效果。 分析实现这种效果有两个重点: 1 动态显示和隐藏系统的状态栏 2 Toolbar和底部Bottom的动画效果 3 顶部Toolbar设置系统状态栏高度padding动态显示和隐藏系统状态栏动态显示和隐藏系统状态栏可以使用WindowManager里面LayoutParam原创 2017-01-06 14:53:50 · 2717 阅读 · 0 评论 -
设计模式-模板方法模式
模板方法模式定义模板方法模式定义:定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法模式非常简单,仅仅使用了Java的继承机制,但它是一个应用非常广泛的模式。模板方法模式算法框架模板方法模式的通用类图如图所示。包含两个角色,一个是抽象模板类,一个是具体模板类。 其中AbstractClass是抽象模板类,它的方法分为两原创 2017-02-10 22:43:16 · 966 阅读 · 0 评论