自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Alex Tam 的专栏

努力对了,努力就对了.

  • 博客(86)
  • 资源 (8)
  • 收藏
  • 关注

原创 [Android] WebView中拍照或从相册上传图片

WebView 上传图片, 想必很多人都碰到过这样的场景. 而且 WebView 在4.4前后的区别非常大, 比如对URL跳转的格式, 对JS的注入声明等等, 4.4以后的WebView 已经是chromium内核, 有多强大就无需我赘述. 说这些, 其实也是为了说明也因为WebView的前后变化太大了, 所以在低版本和版本上, WebView上传文件的方式都略有不同, 而且在安卓4.4.4的一些设

2016-10-16 16:32:07 9528 6

原创 [Gradle] Android Studio批量打包完全自定义APK包名

Gradle 本身是基于 Groovy 语法, 支持批量打包, 非常方便, 大家都知道的.  但在批量打包时, 肯定有个包名重命名的需求, 比如当前项目的 versionName 是 1.2.0, 用户在设备安装APK后所看到的版本号就是 v1.2.0. 当然, APK 应用还有个名称, 比如叫 AppName (当然, 这个名字随意啦, 一般都是英文单词组成),  然后有 3 个渠道, 比如是

2016-07-31 22:44:32 5305 1

原创 [Android] 解决Volley中JsonObjectRequest的Post请求添加参数的问题

由于一开始官方介绍 Volley 适合轻量高并发的网络请求场景, 并不推荐用于上传下载, 因此以前只是粗略了解下就浅尝辄止, 并没有在项目中正式使用. 直到最近用到Volley.  于是碰到了一个问题.使用 JsonObjectRequest  发POST请求时, Volley官方说在getParams(xxx) 方法中传递POST参数是无效的, 需要在构造方法中通过 JsonObje

2016-06-07 16:21:08 13787 1

原创 [Android] Webview利用CookieSyncManager获取或设置Cookies的策略

应用场景或许, 你也有碰到过这样的应用场景:APP应用的某些功能, 需要调用内嵌的WebView去加载某个URL使用.  但用户在手机APP已经成功登录过了. 这时, 如果在内置浏览器去打开网页还需要用户再输入登录一次, 似乎显得不够人性化.  又或者, 用户在内置浏览器(WebView) 访问过一些页面, 想把这些有用的 Cookies 信息保存在本地.  因此, 我们会想, 要是能管理

2016-01-26 15:23:46 15674 8

原创 [Android] 更好的解决 "返回键或取消时自动回调DatePickerDialog的方法onDateSet()" 的问题

自从忙完工作变动的事情后好久没写博了, 内心愧疚啊.... 说好的坚持学习呢... TAT好吧, 回归正题.  用过 Android自带的DatePickerDialog的默认样式是这样的:只有一个 "完成" 按钮...如果将完成选择日期的触发事件放在方法onDateSet(), 那么无论是点击返回键或屏幕outSide的地方,  或者点击 "完成"按钮, 都会

2016-01-21 16:03:51 2790

转载 RSA算法原理

原文链接作者: 阮一峰如果你问我,哪一种算法最重要?我可能会回答“公钥加密算法”。因为它是计算机通信安全的基石,保证了加密数据不会被破解。你可以想象一下,信用卡交易被破解的后果。进入正题之前,我先简单介绍一下,什么是”公钥加密算法”。一、一点历史1976年以前,所有的加密方法都是同一种模式:(1)甲方选择某一种加密规则,对

2015-10-15 17:06:57 1179

原创 [Android] 快速实现一个可切换Tab标签页的组件

在移动应用上, 可水平切换Tab或者点击标签里上的某个标签直接跳到某个对应标签页, 这种交互很常见. 的确, 在开源上也有相当多不错的这类开源可用, 比如ViewPageIndicator, MaterialTab等等.  开源给予我们很多帮助, 提高我们的开发效率, 而研究别人优秀的代码也能提高自己的水平.但另一方面, 我们去使用开源的时候, 往往会遇到一个问题, 而这个问题相信也是

2015-10-14 23:15:20 6595

原创 [Android]仿京东手机端类别页

[Android]仿京东手机端类别页京东手机端的类别标签页, 是一个左侧滑动可选择类别, 右侧一个类别明细的列表联动页面. 当用户选择左侧选项, 可在右侧显示更多选项来选择. 实现方式也不少. 最常见的当然是左侧和右侧各一个Fragment, 左侧Fragment放置ListView, 右侧放显示类别明细的Fragment. 如果觉得页面包含的Fragment太多, 左侧直接给一个ListView就

2015-08-24 21:51:42 4171 2

原创 [Android] 快速实现一个通用EmptyView

好的APP应当具备良好的交互, 最好能贴心的满足用户的需求. 而人性化的提醒就是其中之一. 某些APP中经常会看到这样的场景, 当加载内容失败, 或者获取内容失败时, 界面会变成一个可与用后交互的场景. 允许用户点击屏幕或者界面中某个按钮, 尝试重新获取内容或者检测网络连接等等.  Android的ListView中有类似setEmptyView(...) 的方法, 当列表中没有数据, 就会显示该

2015-08-18 22:14:18 2279

原创 Lucene全文检索入门体验

Lucene是Apache开源的全文检索框架, 是单纯的搜索工具, 简单易用. 现在已经出到5.2.1的版本, 只需在项目中导入必需的几个jar包就能使用. 使用的过程可以概括为,1)  建立索引2) 搜索查找, 获取搜索结果这里我们一起先来学习几个会用到的核心类:Directory该类在Lucene中用于描述索引存放的位置信息. 比如:Directory

2015-08-09 00:53:41 4718 1

原创 Android Studio升级到最新v1.3版后配置GitHub提示Gradle版本不支持的问题

基于ADT(基于Eclipse)开发Android的IDE已经被谷歌官方放弃, 首页推荐使用Android Studio. 于是使用AS的人也开始多起来了. 从0.8到现在, AS更新很频繁, 最近更新了1.3版本后, 计划将部分项目连接到Github上面管理. 在setting配置地址和登录信息, 测试连接时成功了.  然后检出Git项目到本地时却提示 the project is using

2015-08-04 23:10:38 2099

原创 [Android]实现简单的任务管理器(非root)

由于不是系统级的应用, 也没有获得ROOT权限, 所以自己实现任务管理器其实意义并不是很大, 就像没有root的手机安装了LBE这类的手机助手, 虽然也带一键清理内存清理后台进程的功能, 但由于手机助手没有ROOT的最高权限, 因此面对开启了守护进程或者其他自启动的应用进程也是手无举措. 而随着谷歌的推动, 即将推送面世的新系统Android  M, 也对权限的管理越来越严格, 这也看出一个趋势,

2015-07-30 01:23:15 4919 2

原创 JS在页面限制checkbox最大复选数

应该是挺简单的代码, 记录以下, 方便以后看看.首先最直接的想法就是使用循环, 用局部变量记录已选的checkbox, 达到最大值就将余下的checkbox都禁止选择, 如下:JS限制checkbox复选框多选function onCheckBox(checkbox){ var items = document.getElementsByName("item");

2015-07-16 10:22:34 1733 2

原创 Android实现夜间模式小结

随着APP实现的功能越来越丰富, 看小说看视频上网等等, 现在不少人花在手机平板等移动终端上的时间越来越长了. 但手机和平板的屏幕并不像Kindle那类电纸书的水墨屏那么耐看, 由于自发光的屏幕特性, 我们长期盯着屏幕看容易眼睛酸痛疲倦, 因此各种护目模式, 夜间模式在移动APP上得到广泛应用, 这的确也是一个贴心的小功能. 所以这次我们探讨下几种实现方式, 一起学习总结下:1, 利用

2015-07-15 14:22:52 3482 2

原创 Android本地化存储Cookie(针对HttpClient)

因为最近有人问我怎么保存HttpClient的Cookie, 所以这里写下, 顺便记录总结吧. 当然, 有Android网络编程经历的童鞋一看就懂喇~ 就不多说了, 直接上代码:/** * 本地存储Cookie * @param response */ private void saveCookies(HttpResponse response

2015-07-08 17:54:45 3430

翻译 Android性能优化 - 避免内存泄露

以前在网上也看过类似的译文,但也忘得差不多了. 直至最近在官网再次看到原文, 虽是09年的文章, 略显久远, 但再看一次还是觉得总结很好. 于是决定翻译下来, 顺便巩固自己的相关知识.原文链接安卓应用在大多数机型( 针对以前的比较旧的机型, 现在的手机配置越来越高, 可分配的运行内存也相应会比以前提高) 会得到16MB的应用内存. 即使你不打算真的使用这全部的内存, 你也应

2015-06-22 22:41:11 774

翻译 Android开发调试必备 - 使用DDMS

原文地址Android开发平台自带一个调试工具, 叫Dalvik Debug Monitor Server(简称DDMS). 这个工具提供了端口传输服务, 在当前连接的调试设备上截图, 设备的线程和堆(heap)信息, logcat信息, 进程状态信息 和 广播信息, 模拟目标机拨打电话和发送信息, 模拟位置数据等等.这篇文章将会适当的讨论DDMS的特点, 但不会详尽的介绍所有功能

2015-06-19 00:11:50 10461 1

原创 Android自定义View之快速实现下拉刷新, 点击加载更多ListView

介绍ListView是最常用UI组件之一. 由于手机的屏幕大小很有限, 如何在如此有限的空间简化交互操作, 将省下的空间用于显示更多的数据就显得相当有意义. 比如"刷新数据" 和 "加载下一页数据"等功能, 原来可能在视图的菜单栏上设计了固定的按钮, 但这些按钮无疑使界面看起来稍微"复杂"了一些. 于是大牛们将这种交互简化成列表下拉刷新, 上拉加载更多, 滑动到底部点击加载更多, 滑动到底部自

2015-06-12 16:26:20 2021 2

原创 [Android]浅析Http框架 - Android-Async-http

现在主流的网络框架越来越多, Volley, okHttp, Android-Async-http. Android-Async-http是出现比较久的网络框架,用的人相当多. 后来Google结合HttpClient和HttpUrlConnection的优点又推出同样优秀的框架Volley.这些都是优秀的框架,值得我们去阅读源码学习. Android-Async-http我用过很长事件,但都没去

2015-06-02 23:59:29 2001 2

原创 Android性能优化之解密ZAKER,网易云阅读等新闻应用的内容缓存加载方式

我是比较关注时事的, 每天都会花一点事件去看看新闻什么的. 因此类似ZAKER, 网易云阅读等这类的资讯聚合类应用是我的钟爱, 并且这些应用也确实做得很好,值得学习! 前面一篇文章, 讲了缓存的一些构思. 之前也写过LRUCache类的一些缓存实践, 但那只是放在应用的缓存中,并不适合做长期的缓存.  这次我们来实践完整的例子, 模仿ZAKER那类应用是如何加载一条新闻的,并且如何缓存这条新闻的.

2015-05-22 02:49:28 4440 10

原创 Android性能优化之关于缓存的构思

为了提升用户体验, 对应用显示的数据进行缓存是非常好的方案.用过ListView,GridView,ViewPager等这些组件的童鞋都知道 , 应用都有预加载的行为, 比如当前看的是ViewPager第一页数据, 第二页甚至第三页还没显示出来, 但数据已经准备就绪, 用户只要一滑动到下一页, 数据马上就显示, 而不是等到滑动第二页才去加载(当然有时候为了优化,也可能这么做吧,具体情况具体分析.)

2015-05-18 23:08:25 1697

原创 [Android]类似淘宝的数字自增自减文本

手机的支付宝每次打开都有一个数字从0到特定数字的增加或减少, 表示数值的更新. Android也提供了CountDownTimer去实现类似的效果. 要自己来实现, 原理也并不复杂,主要用Handler去定时刷新数字, 和CountDownTimer类似. 于是结合Handler和TextView即可实现. 效果图, GIF图看起来不连贯. 运行代码效果会好一些.例

2015-05-12 20:13:29 2052

原创 ViewDragHelper实践之仿Android官方侧滑菜单NavigationDrawer效果

相信经常使用移动应用的用户都很熟悉侧滑菜单栏, 下拉, 下弹, 上弹等应用场景, 几乎主流的移动应用无论IOS 还是Android都能看到. 2.3以前的时候, 很多第三方比如SlidingMenu, MenuDrawer, ActionbarSherlock等等都很大程度的丰富和深化了这种交互理念.能让小小的屏幕, 容纳更多的交互接口. 也是这种趋势, Android官方在v4终于推出了Draw

2015-05-09 00:55:47 1988 1

原创 Android的ViewDragHelper源码解析

其实我想看的是DrawerLayout, 但发现DrawerLayout里面是使用了ViewDragHelper去实现.谷歌比较早就放出这个类了,但ViewDragHelper是开发中很少用到一个类.顾名思义这是一个和拖曳触摸有关的类.本着追根溯源的想法, 加上ViewDragHelper的源码也不算多,就决定将ViewDragHelper的源码看一遍.对实现原理了解下.代

2015-05-06 00:16:32 2163 2

原创 Android性能优化之提高应用响应速度(了解ViewStub和推迟视图的初始化)

为什么需要推迟视图初始化这里谈谈为什么要推迟视图的初始化. 假设这样一个情况, 如果手机的界面包含大量的视图组件,而且数据大多都来源于服务器. 这就意味着一进入这个界面,应用就会在onCreate()方法中去初始化为数不少的layout资源, 而初始化View是一个比较耗时耗资源的操作. 然后, 应用进行几个网络链接,去获取数据回来更新填充View中的各个组件. 这样算起来, 用户从进入某个A

2015-04-26 22:43:14 2757 2

原创 Android性能优化之谈谈SparseArray,SparseBooleanArray和SparseIntArray

相信大家都明白,手机软件的开发不同于PC软件的开发,因为手机性能相对有限,内存也有限,所谓“寸土寸金”,可能稍有不慎,就会导致性能的明显降低。Android为了方便开发者,特意在android.util这个包中提供了几个提高效率的工具类,比如之前用过的LruCache类,这次我们来谈谈其他工具类,SparseArray,SparseBooleanArray和 SparseIntArray。

2015-04-14 00:24:03 16275 2

原创 Java常用的几个正则方法(查找索引,匹配,替换)

正则表达式是一种为了方便操作字符串而约定的规则.在PHP,JAVA等很多主流语言都有正则的使用.最常见的用法莫过于查找,替换和匹配.下面作为简单的总结,通过用简单的例子,记录下常用的几个方法.关于正则如何使用,就不解释了,因为网上也能找到非常多的相关资料可以看.这里只将几个常用的方法总结:查找索引通过关键字符串,去在目标内容中去匹配查找它的位置,这应该是最常见的用法. Stri

2015-04-09 17:22:58 9789

原创 Android数据存储之操作SQLite

安卓手机的存储方式,主要有File,数据库,SharePreFerence和网络等等。这里我们讲讲android上数据库的使用。常见的数据库比如Oracle,SQL Server和MySQL,这些都是主流的数据库,但是放在手机上实在是太“重量化”了。所以Android提供了SQLiteDatebase。这是一种轻量化的数据库,用户不必过多关心表的存储关系,直接用就行了。而且为了方便,系统也提供了可

2015-04-08 23:44:02 708

原创 简析Handler、Looper和MessageQueue三者的关系

Android开发中,Handler用的非常多,因为它和AsyncTask一样是系统提供给我们的异步的通信机制。能够将一些更新和别的不适合放在UI主线程的操作放到它们中去。Handler的作用主要有两个:一是在线程中发送消息, 二是获取和处理消息。既可以发送消息sendEmptyMessage(int what) ,也可以发送指定的消息sendMessage(Message msg),还可以利

2015-04-02 22:59:40 908

原创 Fragment的通信问题, 新建Fragment为何不要在构造方法中传递参数?

最近有个新进来的同事做Android开发,因为之前都是做Java的,所以新建对象习惯在构造方法里面去传递参数回调方法什么的.于是当他在Activity中创建Fragment的时候,也使用了类似new TestFragment( "content" ) 这样的方式去将Activity中的参数传递到TestFragment中. 第一次用的时候没报错,然后进出几次TestFragment就报androi

2015-03-31 00:56:00 6169 4

原创 关于Activity使用startActivityForResult()跳转后,onActivityResult()无法响应RESULT_OK的原因

最近碰到这个问题, 然后Google一番. 于是记录下来. 去翻Android Developers网站的Reference, 在Activity的介绍中有段文字如下:意思是当Activity的启动模式是singleTask时,这个Activity不会运行在该task任务栈中.并且会马上收到一个cancel result的信号.这就是原因了.比如Activity A

2015-03-26 11:57:31 3060

原创 Android基础视图组件之计时器( Chronometer )

安卓系统是内置了计时器(Chronometer)的,但是不很强大,只能显示以秒为单位的计时。如果要具体到毫秒级,就要自己写方法实现了。因为Chronometer这个组件灰常简单,提供的api方法也少,可直接通过例子了解。计时器(Chronometer)的核心方法有:start()   //开始计时stop() //结束计时setBase() //设置开始时间,一般使用S

2015-03-23 22:23:16 1707

原创 安卓动画系列之属性动画实现跳起落下圆圈运动

最近看了淘宝手机端的有些页面是类似下面这个小球的加载效果。后来了解了下,淘宝是直接一个gif图片实现效果的,这当然是最简单的方法。为了加深了解属性动画,这次就做个类似的效果。这依旧由几个简单的属性动画组合在一起,所有动画都在代码里实现了。看注释就好。上个效果图:实现代码:小球圆圈的XML文件 drawable_dot.xml:<shape xmlns:an

2015-03-22 23:14:23 1644

原创 安卓动画系列之五, 属性动画PropertyAnimation(下) - 通过官方例子深入了解

这里继续之前写的上篇属性动画PropertyAnimation(上)之初步印象 来写下篇,了解一下自定义的对象如何调用实现属性动画,还有AnimatorSet的一些灵活用法.本来也尝试像之前那样写demo去讲,但发现android官方在这方面已经提供了非常好的例子,于是就拿官方的这个小球下落回弹来作为例子,深入的了解属性动画的用法吧. 代码中的注释我已经非常详细,所以不再另外写出来了.过一遍代码,

2015-03-18 20:43:41 1115

原创 android的ShapeDrawable源码解析

相信很多人都用XML里面的shape标签,就能实现椭圆,矩形等图形.然后直接当做Drawable来使用.比如ImageView.setImageDrawable(Drawable). 没错,这个shape标签所实现的图形Drawable其实就是ShapeDrawable对象,而ShapeDrawable是 Drawable的子类.(按照这个规律,也许你还会发现Drawable的子类还有Gradie

2015-03-13 22:36:26 2070

原创 插入排序算法之C++实现

插入排序,顾名思义其实现形式是插入.在整个大小不一的队列中, 第一次: 从一个元素开始,将后面相邻的元素(第二个元素)提取出来,放在一个变量中暂时保存,然后和第二个元素前面的那个元素(第一个元素)做比较,如果比它大,当然就不变动位置;但如果比它小,就将前面那个元素移动到第二个元素的位置,然后将变量的元素插入放在第一个元素的位置; 第二次: 从第二个元素开始将后面相邻的元素(第三个元

2015-03-12 23:31:42 2420

原创 Android性能优化之实现双缓存的图片异步加载工具(LruCache+SoftReference) - 拿来即用

之前在郭大神的博客看到使用LruCache算法实现图片缓存的.这里仿效他的思路,自己也写了一个. 并加入ConcurrentHashMap>去实现二级缓存,因为ConcurrentHashMap是多个锁的线程安全,支持高并发.很适合这种频繁访问读取内存的操作.下面整个思路是,使用了系统提供的LruCache类做一级缓存, 大小为运行内存的1/8,当LruCache容量要满的时候,会自动

2015-03-11 00:32:42 1488

原创 选择排序算法之C++实现

选择排序算法, 和上篇讲的冒泡算法很类似.很容易混淆理解.所以这篇紧接着就讲选择排序算法.上篇讲过,之所以叫冒泡排序, 是因为从第一个数开始和自己相邻的元素做两两比较,哪个最大就后置,然后这样第二个元素就比第一个元素大,用同样的方法就保证了第三个元素又比第二个元素要大.不断重复这个过程, 最后一个元素肯定是最大的.这样,整个排序是两两比较,找出最大的,从大到小找出所有元素去排列,就就像

2015-03-10 01:03:35 951

原创 冒泡算法之C++和Java实现

(大神可以请直接忽略这篇文章了...)最近碰到一些算法的问题,于是重新去温习了.冒泡算法应该是最简单实现的算法之一,复杂度也不算高.在日常用还是经常被用到.至于为什么叫冒泡算法? 是因为数值大小不一的散乱排列的元素,经历这样的处理: 第一次,先将排列的第一个元素和临近的第二个元素对比,谁的数值大就放在后面,数值小的元素就往前移. 然后第二次, (这个时候第二个元素已经比第一个元素大了) 将第二个元

2015-03-09 01:14:12 673

原创 android之手机开机启动Service服务

之前,介绍了四大组件的BroadCastReceiver和Service,这次我们利用广播来启动Service服务. 这种实现在很多APP都有出现,比如很多应用安装后,只要使用过一次,后面重启手机它可能就会推送一些消息给用户的手机,在顶栏显示某个应用又有什么消息之类的.这只是Service的行为, 只要成功启动了Service服务,还可以根据需要自定义其他的行为.关于BroadCast

2015-03-08 18:07:54 1478

Lucene5.2.1 入门学习例子

Lucene5.2.1 入门学习例子. 这是别人的例子源码,原下载是要积分的. 所以上传在这免积分.

2015-08-09

Android下拉刷新点击加载ListView

Android下拉刷新点击加载ListView

2015-07-24

Android调用本机相机实现拍照和截图,保存至本地

这是很久以前测试的代码,现在重新精简了下备个份吧.

2015-05-22

仿ZAKER,网易云阅读等新闻应用的内容缓存加载方式Demo

利用WebView加载,并缓存新闻内容的加载. 原文链 接:http://blog.csdn.net/stzy00/article/details/45905497

2015-05-22

安卓帧动画FrameAnimation例子

一个动态表情的例子,快速了解帧动画的使用.

2015-01-31

TestCompleteText_AutoCompleteTextView和TextWatcher结合使用

TestCompleteText_AutoCompleteTextView和TextWatcher结合使用的小栗子, 常见的安卓TextView输入显示关键词下拉提示.

2014-09-15

图片轮播_支持显示网络图片及下载图片至SD后再显示_switchPicDemo

图片轮播_支持显示网络图片及下载图片至SD后再显示.

2014-08-22

Delphi编写的学校公寓管理系统

有空用Delphi写了个简单的公寓管理系统。还在完善中。

2011-12-21

空空如也

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

TA关注的人

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