摘要: 大部分app打开pdf文件是通过intent调起手机中能打开pdf文件的工具,来查看pdf文件,如果需求是,用户在app内下载好pdf文件后,不通过第三方的工具,本地打开。 这样的需求要怎么实现呢?上网查了一些资料,发现了一个很好用PDF开源库。 使用起来也很简单,首先添加PDFView的引用 阅读全文
posted @ 2017-04-27 16:31 CurtisWgh 阅读(6425) 评论(0) 推荐(0) 编辑
摘要: Android 正则表达式验证手机号、姓名(包含少数民族)、身份证号 阅读全文
posted @ 2017-04-25 17:38 CurtisWgh 阅读(9273) 评论(0) 推荐(0) 编辑
摘要: 之前写了篇Android OkHttp完全解析 是时候来了解OkHttp了,其实主要是作为okhttp的普及文章,当然里面也简单封装了工具类,没想到关注和使用的人还挺多的,由于这股热情,该工具类中的方法也是剧增,各种重载方法,以致于使用起来极不方便,实在惭愧。 于是,在这个周末,抽点时间对该工具类,进行了重新的拆解与编写,顺便完善下功能,尽可能的提升其使用起来的方便性和易扩展性。 标题的改善,也是指的是对于我之前的代码进行改善。 如果你对okhttp不了解,可以通过Android OkHttp完全解析 是时候来了解OkHttp了进行了解。 阅读全文
posted @ 2017-03-14 15:59 CurtisWgh 阅读(639) 评论(0) 推荐(0) 编辑
摘要: EventBus是一款Android下的发布/订阅事件总线机制。可以代替Intent、Handler、Broadcast等在Fragment、Activity之间传递消息。 优点:开销小,代码优雅。将发送者和接受者解耦。 既然是有关于事件的发布和订阅,那么发布者和订阅者的关系又是怎样的呢? 事件的发布者可以发布多个事件,发布者同时也可以是订阅者,订阅者可以订阅多个事件。 阅读全文
posted @ 2017-02-13 18:04 CurtisWgh 阅读(28366) 评论(0) 推荐(1) 编辑
摘要: 最近项目需要针对微信、朋友圈、QQ、QQ空间集成友盟分享的功能,说实话,我也是第一次做,期间碰到过很多问题,这篇随笔就来写一下我是怎么集成友盟分享的,还有碰到哪些问题,都是怎样解决的! 其实集成友盟并不是很难,跟着集成文档一步一步走下来就可以,而且下载的友盟SDK会附带Demo,但是Demo中有很多东西是用不上的,所以就需要我们选择性的摘取有用的部分! 1-获取友盟Appkey 如果你之前已经在友盟注册了应用,并获取到了Appkey,可以继续使用它. 如果你尚未在友盟注册开发者账号,需要先注册,注册之后登录你的账号,点击添加新应用,填写完应用基本信息后,将进入"下载SDK并添加代码"页面,此页面即可得到Appkey。 阅读全文
posted @ 2017-02-09 14:46 CurtisWgh 阅读(11853) 评论(2) 推荐(4) 编辑
摘要: 按类型,自定义View可以分为三种:自绘控件、组合控件、继承控件,对于这三种类型,我会写三篇博客来分别介绍和使用。 自定义View中有三个非常重要的方法,分别为: onMeasure():如果需要改变view的大小,那么需要重写onMeasure()方法。 onLayout():如果需要改变View的(在父控件的)位置,那么需要重写onLayout()方法。 onDraw() :如果仅需要绘制View的图像,那么需要重写onDraw()方法。(这也是最常用的重写方式。) 阅读全文
posted @ 2016-10-18 16:49 CurtisWgh 阅读(1688) 评论(0) 推荐(0) 编辑
摘要: 1:实例化PopupWindow的对象,三个参数分别对应:填充的布局文件、在当前Activity上所占的宽、高 PopupWindow popupWindow= new PopupWindow(contentView, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 2:完成第一步所需要的布局文件,并实例出来 View contentView = mLayoutInflater.inflate(R.layout.pop, null) 3:设置PopupWindow 所必备的两个属性 //popupWindow的背景 (1)popupWindow.setBackgroundDrawable(......); //popupWindow要显示的位置 (2)popupWindow.showAtLocation(View parent, int gravity, int x, int y) 阅读全文
posted @ 2016-09-26 18:44 CurtisWgh 阅读(3901) 评论(0) 推荐(0) 编辑
摘要: handler通俗一点讲就是用来在各个线程之间发送数据的处理对象。在任何线程中,只要获得了另一个线程的handler,则可以通过 handler.sendMessage(message)方法向那个线程发送数据。基于这个机制,我们在处理多线程的时候可以新建一个thread,这个thread拥有UI线程中的一个handler。当thread处理完一些耗时的操作后通过传递过来的handler向UI线程发送数据,由UI线程去更新界面。 阅读全文
posted @ 2016-09-23 18:23 CurtisWgh 阅读(557) 评论(0) 推荐(0) 编辑
摘要: 1、SpannableString、SpannableStringBuilder与String的关系 首先SpannableString、SpannableStringBuilder基本上与String差不多,也是用来存储字符串,但它们俩的特殊就在于有一个SetSpan()函数,能给这些存储的String添加各种格式或者称样式(Span),将原来的String以不同的样式显示出来,比如在原来String上加下划线、加背景色、改变字体颜色、用图片把指定的文字给替换掉,等等。所以,总而言之,SpannableString、SpannableStringBuilder与String一样, 首先也是传字符串,但SpannableString、SpannableStringBuilder可以对这些字符串添加额外的样式信息,但String则不行。 注意:如果这些额外信息能被所用的方式支持,比如将SpannableString传给TextView;也有对这些额外信息不支持的,比如前一章讲到的Canvas绘制文字,对于不支持的情况,SpannableString和SpannableStringBu 阅读全文
posted @ 2016-09-22 18:40 CurtisWgh 阅读(7276) 评论(0) 推荐(0) 编辑
摘要: 今天发的是TabHost结合ViewPager实现首页底部导航的效果,虽然说网上有很多这样的Demo,不过呢,我还是要把自己练习写的发出来,没错!就是这么任性; 先上效果图,如下: 代码里面有注释,就不过多解释了,说几点需要注意的问题 1:TabHost 、TabWidget、FrameLayout 阅读全文
posted @ 2016-09-21 14:15 CurtisWgh 阅读(601) 评论(3) 推荐(1) 编辑