
Android
文章平均质量分 70
老胡 - laohu
这个作者很懒,什么都没留下…
展开
-
Android模块化开发配置
模块化项目由多个模块组成每个模块都是一个独立的Feature或组件业务模块间解耦不相互直接依赖业务模块与公共组件模块通过aar依赖每个模块独立开发,独立运行调试模块化的好处当一个项目越来越大,越来越复杂后,代码量就会变得越来大,难以阅读难以维护,业务之间出现耦合的可能性也会越来越大,同时整个APP编译调试的时间也会越来越长。而使用模块化开发则可以解决以上问题:项目代码结构清...原创 2019-05-10 21:14:01 · 1204 阅读 · 0 评论 -
透过Retrofit使用看其源码设计模式
前言这篇文章我将从Retrofit的基本用法出发,透过其使用步骤,一步步的探究Retrofit的实现原理及其源码的设计模式。这篇文章可能会将Retrofit中用到的设计模式和其实现原理穿插着写,所以各位同学也可以选择性的阅读。而对于Retrofit具体使用还不太清楚的同学可以去看的另一篇文章Retrofit2的使用介绍Retrofit基本用法我以用户登录作为示例:声明接口首先我们先定义一个登录服务接原创 2016-10-16 12:29:14 · 5178 阅读 · 1 评论 -
Android基础之9-Patch(9.PNG)与padding
欢迎访问我的个人独立博客 ittiger.cn,原创文章,未经允许不得随意转载。在上一篇文章记一次9.png的填坑之旅最后,我留了两个个问题: 1. 为什么使用9.PNG设置背景之后会改变控件的padding属性值 2. 在我所遇到的问题中9.PNG明明改变的是padding值为什么却产生了margin的效果 这篇文章就来解答这两个问题以及9.PNG使用过程中需要注意的地方。各位同学如果没看原创 2016-11-18 22:06:09 · 4707 阅读 · 1 评论 -
RxJava学习之基本使用
欢迎访问我的个人独立博客 ittiger.cn,原创文章,未经允许不得随意转载。RxJava现在在Android开发中越来越流行,作为一个Android开发者我也必须紧跟步伐学习学习RxJava,这篇文章就记录了RxJava`中我认为比较常用的一些场景。也给大伙推荐篇比较好的RxJava文章 * 给 Android 开发者的 RxJava 详解RxJava基础大家都知道JDK中提供了观察者模式的实原创 2016-10-30 20:55:52 · 1538 阅读 · 0 评论 -
TextView之SpannableStringBuilder使用总结
欢迎访问我的个人独立博客 ittiger.cn,原创文章,未经允许不得随意转载。最近项目中碰到一个TextView的显示问题,想了各种办法之后,最后还是用SpannableStringBuilder解决的。这篇文章就记录下我的问题的解决过程,同时总结下SpannableStringBuilder在TextView中的不同用法。背景项目中GridView有两列,每个Item视图都有一个TextView原创 2016-11-05 21:59:10 · 6434 阅读 · 1 评论 -
记一次9.png的填坑之旅
欢迎访问我的个人独立博客 ittiger.cn,原创文章,未经允许不得随意转载。最近在项目中进行界面调整时遇到了一个9.PNG图引起的View的padding值不正常导致UI显示不符合预期结果的问题。这篇文章就来记录我当时遇到的问题的表现形式,以及如何根据问题找到产生问题的原因,及其最后的解决办法。问题表现形式不多说,直接上出现问题的视图表现形式的截图: 我的实现上图中我实现的是一个ListVie原创 2016-11-05 15:32:20 · 1240 阅读 · 0 评论 -
Retrofit2文件上传下载及其进度显示
序前面一篇文章介绍了Retrofit2的基本使用,这篇文章接着介绍使用Retrofit2实现文件上传和文件下载,以及上传下载过程中如何实现进度的显示。文件上传定义接口@Multipart@POST("fileService")Call<User> uploadFile(@Part MultipartBody.Part file);构造请求体上传File file = new File(fileP原创 2016-09-22 10:08:33 · 11558 阅读 · 6 评论 -
Retrofit2使用介绍
前言对于还不知道Refrofit是什么的同学,我只能说你们太out了,赶紧去Google下,本文是针对Retrofit2.0的使用介绍,当然大家也可以直接去官网上去看使用介绍添加依赖要使用Retrofit首先得添加gradle依赖compile 'com.squareup.retrofit2:retrofit:2.0.2'compile 'com.squareup.retrofit2:conver原创 2016-09-22 10:04:39 · 3396 阅读 · 0 评论 -
RecyclerView绘制原理探究
RecyclerView使用原理探究RecyclerView中的几个主要内部类RecyclerView基本使用//首先设置RecyclerView的布局管理模式mRecyclerView.setLayoutManager(new LinearLayoutManager(this));mAdapter = new MyAdapter(getData());//设置Item项的UI装饰器mRec原创 2016-05-19 00:58:42 · 8814 阅读 · 1 评论 -
Android基础篇之:Activity生命周期
之前一直对Activity的生命周期不是很清楚,感觉很模糊。前两天也看了下任玉刚书里对Activity生命周期的讲解,今天特意写了个程序验证了下Activity的生命周期内各个回调的执行情况,为了避免多段时日又忘了,干脆对这次的理解总结下,俗话说好记性不如烂笔头,没事的时候可以回过头来再看看。我们先来看一张非常经典的Activity生命周期流程图:Activity的生命周期大致有如下几...原创 2015-10-08 22:02:20 · 995 阅读 · 0 评论 -
在线视频播放App的实现
前一段时间在公司项目上做了一个视频播放的功能,当时时间紧,做完之后感觉有些地方处理的不好,所以就基于当时实现的思路进行了一些改进,加上自己平时喜欢看新闻客户端里面的一些短视频,所以就用网易等客户端的视频数据完成了一个独立的视频播放APP,顺便巩固下其他的技术。主要功能列表中播放视频列表滑动时如果正在播放视频,则列表中播放的视频自动切换为小窗口浮动播放列表播放切换到全屏播放模式视频播放时也添加原创 2016-09-28 14:22:04 · 13934 阅读 · 0 评论 -
让RecyclerView更通用
用过RecyclerView的都知道它没有为我们提供像ListView中类似addHeaderView,addFooterView,setOnItemClickListener,setOnItemLongClickListener的接口,而这些都是列表使用中很常见的功能,所以如果我们使用RecyclerView来实现列表的话就需要自己实现这些功能。本文主要介绍这些通用功能的实现方式,使得Recyc原创 2016-07-27 12:16:57 · 2978 阅读 · 3 评论 -
Android资源应用与适配标准
欢迎访问我的个人独立博客 ittiger.cn,原创文章,未经允许不得随意转载。本文内容来自Android官网对Android开发过程中资源使用、资源适配、资源选择原理的介绍和建议。Android资源类型Android项目结构一个Android项目有多重资源类型,我们一般都会将各种资源放入项目 res/目录的特定子目录下。例如,以下是一个简单项目的文件层次结构: 正如我们在此示例中所看到的那样,r原创 2016-11-19 19:05:57 · 1287 阅读 · 0 评论 -
Android中用Kotlin Coroutine(协程)和Retrofit进行网络请求和取消请求
Kotlin Coroutine(协程)系列:1. Kotlin Coroutine(协程) 简介2. Kotlin Coroutine(协程) 基本知识前面两篇文章介绍了协程的一些基本概念和基本知识,这篇则介绍在Android中如何使用协程配合Retrofit发起网络请求,同时介绍在使用协程时如何优雅的取消已经发起的网络请求。此篇文章的Demo地址:https://github.com/...原创 2019-04-22 17:25:05 · 7270 阅读 · 6 评论 -
Kotlin Coroutine(协程) 基本知识
Kotlin Coroutine(协程)系列:1. Kotlin Coroutine(协程) 简介这篇文章主要介绍协程中的一些基本概念。挂起函数(suspend关键字)Kotlin中提供了关键字suspend用来描述一个函数为挂起函数,写法如下://官方提供的函数suspend fun delay(timeMillis: Long) { ...}以上写法就代表delay...原创 2019-04-14 16:41:36 · 1639 阅读 · 0 评论 -
Kotlin Coroutine(协程) 简介
协程介绍协程是可挂起计算的实例。它在概念上类似于线程,在这个意义上,它需要一个代码块运行,并具有类似的生命周期,它可以被创建和启动,但它不绑定到任何特定的线程。它可以在一个线程中挂起其执行,并在另一个线程中恢复。而且,像future 或 promise那样,它在完结时可能伴随着某种结果(值或异常)协程开发人员这样描述协程:协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞...原创 2019-04-13 19:07:19 · 2090 阅读 · 0 评论 -
TextSwitcher与ViewSwitcher学习笔记
TextSwitcher和ViewSwitcher是什么,有什么用呢?其实大家从名字就可以看出来其大概意思,TextSwitcher是用来切换文本显示的,而ViewSwitcher是用来切换视图显示的,实际上他们也的确是用来做这个的,只不过他们在切换视图显示的时候允许添加切换的动画效果。TextSwitcher其实也是ViewSwitcher的子类实现。TextSwitcher使用我们先来看看Tex原创 2017-07-12 14:16:41 · 1113 阅读 · 0 评论 -
关于媒体浏览器服务(MediaBrowserService)
今天说的这个主题与媒体播放有关,尤其是音乐播放,说到音乐播放大家应该都用过音乐App。 通常一个音乐App的实现主要涉及如下几点: 1. 从服务器获取音乐数据 2. 播放音乐时播放器的各种播放状态以及不同状态下的UI展示 3. 播放过程中通过UI界面控制播放器的各种状态 4. UI控制如何与播放服务进行关联并进行状态同步 4. 如何保证后台播放过程中播放服务不被杀死对于上面的这几点,其实原创 2017-04-30 23:39:39 · 19423 阅读 · 4 评论 -
Behavior实现UC浏览器首页动画效果
老规矩,还是先上效果图 github地址前面我也写过一篇关于UC浏览器首页滑动动画效果的文章UC浏览器首页滑动动画实现,只不过这篇文章是通过自定义View的方式实现这个滑动效果。最近在看Behavior相关的东西,所以使用Behavior又实现了一次UC浏览器主页的滑动效果,使用Behavior实现相比较自定义View的实现方式还是要简单方便很多。View结构分析UC首页滑动过程中可以分为四个Vi原创 2017-03-31 23:08:31 · 2841 阅读 · 0 评论 -
Behavior实现滑动隐藏ToolBar与BottomNavigation
多说无益,先上效果图img\material-design这个效果其实是和SegmentFault的首页效果是一样的。Demo github地址戳这里来由 前几天有人问我这样的效果如何实现,有何思路,我的第一反应就是使用Behavior来实现这个效果,使用Behavior实现此效果比自定义View实现此效果绝对要简单很多,之后找时间了实现了这个效果。思路用过ToolBar + Coordinato原创 2017-03-09 17:06:14 · 4344 阅读 · 1 评论 -
自定义Behavior实现快速返回效果
Behavior是Android Design包中出现的一个概念,Android Design包中很多控件的动画效果都是使用Behavior实现的,所以想要更好的实现Material Design风格的应用就有必要弄清楚Behavior。这篇文章从简单开始,介绍如何自定义Behavior以实现快速返回的效果。先看最终的实现效果 介绍先看官方介绍https://developer.android.g原创 2017-02-28 18:06:10 · 1179 阅读 · 0 评论 -
自定义实现微信通讯录效果View
前言在使用App过程中,经常会有使用到联系人或城市列表的场景,其实这两种效果是一样的,都是右边有个索引列表,点击索引列表可跳转到指定字母开头的联系人或城市上去,同时向上滑动过程中头部会有个显示当前联系人首字母的界面固定不动。下面我以微信通讯录的效果作为例子,介绍我是如何实现一个这样效果自定义View的思路和过程。实现效果下面是我实现的最终效果图(GIF录制的不太好),想看源代码的同学戳这里https原创 2016-12-31 16:34:57 · 4887 阅读 · 4 评论 -
红米Note调用系统相机拍照后应用崩溃问题分析解决
这几天突然发现红米Note手机只要调用系统相机进行拍照时,我的应用必定会崩溃。这个问题折腾了好久才解决,现在记录下问题跟踪解决的过程和方法。(红米Note手机的系统太坑爹了%>_解决办法请直接从第7条开始看,1~5条为我的问题处理过程,第6条为问题原因分析。1. 问题刚出现的时候,当然是想调试,在调用系统相机拍照的前后代码出打好断点准备调试,结果发现这段代码没有任何异常(其实想想也原创 2015-10-22 15:17:33 · 16891 阅读 · 3 评论 -
基于openfire+smack开发Android即时聊天应用[四]-单人聊天、群聊、发送接收文件等
这篇文章主要介绍如何实现点对点单人聊天、多人的群聊、以及如何给对方发送文件,如何发送图片消息和语音消息等功能。欢迎访问我的个人博客:http://ittiger.cn1.单人聊天首先创建聊天对象 /** * 创建聊天窗口 * @param jid 好友的JID * @return */ pu原创 2015-10-30 21:31:39 · 10586 阅读 · 10 评论 -
基于openfire+smack开发Android即时聊天应用[三]-账号信息、添加好友、JID理解等
这一篇文章主要介绍账号的属性及几个重要属性的理解,同时介绍如何添加好友,获取好友列表信息,最后介绍我对JID这个属性字段的几种理解。欢迎访问我的个人博客:http://ittiger.cn1.账号信息获取账号的所有额外属性信息 /** * 获取账户所有属性信息 * @return */原创 2015-10-30 18:06:51 · 6012 阅读 · 1 评论 -
基于openfire+smack开发Android即时聊天应用[一]---openfire安装部署
Java领域的即时通信解决方案可以考虑基于xmpp协议的openfire+smack+spark来实现,都是开源的。最近一直在研究这个,也做了一个简单的Android即时聊天客户端,支持文本、图片、语音消息。欢迎大家访问我的个人博客:http://ittiger.cn1.XMPP协议大家自行到百度google上去补脑吧。2.openfire、smac原创 2015-10-30 16:12:38 · 3691 阅读 · 1 评论 -
基于openfire+smack开发Android即时聊天应用[二]-用户注册、登陆、修改密码、注销等
1.开发准备欢迎访问我的个人博客:http://ittiger.cn在官网上下载最新的Smack开发包,我下载的是smack4.1.4版本的,导入相应的jar包即可开始开发工作2.Openfire服务连接(连接服务器) /** * 连接服务器 * @return */ priva原创 2015-10-30 17:09:02 · 3208 阅读 · 3 评论 -
TableLayout中TextView文本无法自动换行
最近项目中用到了TableLayout布局,发现该布局下的TextView控件的内容无法达到自动换行的效果,布局代码如下:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_hei原创 2015-10-22 10:53:01 · 4334 阅读 · 1 评论 -
Android点击两次返回键退出程序
Android应用中退出应用程序通常有两种做法,一种是使用选择对话框询问用户是否退出应用程序,另外一种是快速点击返回按钮两次然后退出应用。其中第二种实现方式较为普遍,而且我个人认为这种方式用户体验性要好点。下面,我介绍两种常用的点击两次返回退出应用的实现方式。1. 通过标识变量进行控制。首先定义一个布尔变量,赋初始值false。然后监听手机返回按钮,当点击返回按钮时,如果该布尔变量值为fals原创 2015-09-26 14:24:13 · 7083 阅读 · 1 评论 -
Android调用相机无法执行onActivityResult或data为null
最近项目中调用系统相机时遇到了这么个问题:红米手机无法执行onActivityResult回调,部分华为手机无法获取到照片数据,最后各种分析,各种网上搜索资料折腾了好久,最后终于把问题解决,当看到问题的最终原因时,我也是醉了,简直就是坑爹坑大发了。最开始用红米手机调用系统相机的时,当我拍照完成点击那个勾勾始终无法返回到前面的界面上,也就是无法调用onActivityResult函数取到拍照原创 2015-09-26 14:31:56 · 14641 阅读 · 1 评论 -
Android中解压zip中文乱码处理
乱码原因分析一般我们使用的Windows系统外部文件默认都是GBK编码方式,Mac系统默认的好像是UTF-8(同事的电脑就是,不知道其他人的是不是),Linux的没验证过,这里我讨论的是Windows下打包的zip文件。Java中自带的ZipEntry解压缩的编码方式是UTF-8,而且没有可以自定义编码方式的接口,所以当我们使用UTF-8编码去解压缩GBK编码的文件的时,解压缩出来的中原创 2015-09-26 14:20:15 · 11654 阅读 · 1 评论 -
Android中shape的使用
Android中的shape标签用于描述形状,可以在布局文件layout和选择器selector中使用,它有6个子标签,具体如下: <corners android:radius="5dp"/> <gradient a原创 2015-09-26 14:17:30 · 1437 阅读 · 0 评论 -
Android百度地图导航的那些坑
首先要先在AndroidManifest.xml中注册导航服务<service android:name="com.baidu.navi.location.f" android:enabled="true">添加相关的权限,我也不知道哪些是必须的,我直接把Demo里面的相关权限配置全部拉过来了在导航之前要先调用BaiduNaviManager.getInstance().i原创 2015-11-25 10:06:50 · 15290 阅读 · 12 评论 -
Android开发中一些被冷落但却很有用的类和方法
MediaMetadataRetriever顾名思义,就是用来获取媒体文件一些相关信息的类。包括一首歌的标题,作者,专辑封面和名称,时长,比特率等等。如果是视频的话,可以获取视频的长宽,预览图。http://developer.android.com/intl/zh-cn/reference/android/media/MediaMetadataRetriever.htmlTo转载 2016-02-19 10:15:45 · 929 阅读 · 0 评论 -
Android常用开发工具、站点集合
Android 常用的开发工具、站点集合。其中包括AndroidStudio(IDEA)插件以及国内知名Android开发者博客等。Android Studio 插件codota 插件,提供高质量的Android代码片段搜索,官方网站codota官网Android 网站Android Developer Androuid 官网,不解释。AndroidDevT转载 2016-03-06 14:08:49 · 1658 阅读 · 0 评论 -
Android中OkHttp的使用
前段时间研究了下Android里面非常火爆的网络请求库OkHttp,这篇文章主要来介绍下OkHttp的常用请求的使用方式,后面一篇文章会介绍本人基于OkHttp封装的一个操作更简单、更适用于项目的网络请求库TigerOkHttp,其源码及Demo地址为:https://github.com/huyongli/TigerOkHttp一、说明对于OkHttp的基本介绍,以及原创 2016-01-05 17:10:10 · 20546 阅读 · 4 评论 -
简单实用的Android ORM框架TigerDB
TigerDB是一个简单的Android ORM框架,它能让你一句话实现数据库的增删改查,同时支持实体对象的持久化和自动映射,同时你也不必关心表结构的变化,因为它会自动检测新增字段来更新你的表结构。该库主要包括如下几个要点:根据实体对象自动建表、新增字段(SQLite不支持删除字段列) 支持注解配置表名、字段名、字段默认值、主键是否自增长以及哪些字段不作为数据表中的映射字段 直接映射实...原创 2015-09-28 15:58:38 · 1501 阅读 · 0 评论 -
基于OkHttp的封装库TigerOkHttp的使用
在前面熟悉了OkHttp的用法之后,为了简化用法同时适用于我的项目,我针对OkHttp进行了更进一步的封装(源码及其Demo地址在https://github.com/huyongli/TigerOkHttp),封装之后其支持的功能特性包括如下:1.一般的get同步阻塞请求和异步请求2.一般的post同步阻塞请求和异步请求3.实现了文件上传功能(包含文件上传进度回调显示)原创 2016-01-06 12:07:34 · 2559 阅读 · 3 评论 -
RecyclerView子View宽度不充满父容器
今天用RecyclerView写了简单的例子,使用的是LinearLyaoutManager,子View采用的TextView,准备写个简单的List展示,我的RecyclerView和TextView的宽度布局都采用的是match_parent,结果显示出来之后发现子View的宽度压根就没有充满屏幕。之前也用过RecyclerView,但是没有遇到过这个问题,很不解啊~~~网上查阅之后说是在Ad原创 2016-07-23 12:06:54 · 6974 阅读 · 1 评论 -
RecyclerView下拉刷新上拉加载
作为ListView和GridView的替代者, RecyclerView以它的灵活性著称,而且有着更好更完善的缓存处理机制。但是在使用RecyclerVew的过程中有个很明显的问题:RecyclerView没有为开发者提供addHeadView和addFooterView两个接口,这就为RecyclerView的下拉刷新和上拉加载实现增加了难度,本文就为大家介绍RecyclerView的下拉刷新原创 2016-06-30 11:36:13 · 20602 阅读 · 3 评论