自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

飞鸟

学习笔记

  • 博客(170)
  • 收藏
  • 关注

原创 InputConnection

基本概念        android中,输入法与接收输入的一般是两个单独的app。而InputConnection就是连接两个app的桥梁——输入法提供用户选择的字符,然后通过InputConnection交由接收app显示。        由于InputConnection是在文本显示之前进行调用,因此可以通过重写其中的方法修改要显示的内容。常用方法        sendKe

2017-07-27 15:03:45 5065

原创 FlexboxLayout

基础        参考        google出的android端流式布局。属性说明flexDirection        item的方向。row:水平;column:垂直。row_reverse:从最右端开始放入item,先放入的在最后,后放入的在前。column_reverse:与row_reverse类似。flexWrap        决定fle

2017-06-08 17:22:32 884

原创 Kotlin入门(四)——类

参考        官网class        通过class关键字定义一个类。        Kotlin中所有的类都继承于Any类,Any类中只有hashCode,toString以及equals三个方法。        一个类由类名、类头以及类的主体——被大括号包裹起来的就是类的主体——三部分组成。其中类头,类主体是可选的。如果没有类主体,则大括号可以省略。如:

2017-05-24 16:33:56 820

原创 Kotlin入门(三)——变量与问号

参考        官网链接。问号?        定义变量时,可在类型后面加一个问号?,表示该变量是Nullable,不加表示该变量不可为null。如下:var s:String? = nullvar s2:String = "xxx" //如果该变量被赋值为null,则编译不通过        从其对应的java文件(从编译成的class文件中反编译出来的)截取两个变量的

2017-05-23 17:00:16 16810

原创 Kotlin入门(二)——函数fun

官网        官网链接。定义        函数通过fun关键字进行定义。参数        参数的定义形式为:name: type。参数默认值        每一个参数都可以有默认值。如:fun main(args:Array){ println(test(2))}fun test(a:Int,b:Int = 3):Int{//b的默认值是3,所以调用

2017-05-22 15:49:29 7374

原创 Kotlin入门(一)——基本配置、package与import

环境配置        下载编译工具。解压、安装。可参考官网。        将bin文件夹配置到环境变量path中。说明        Kotlin除了语法与java不一样外,其余的与java一样。它编译生成的也是.class文件,也可以打包成jar,并能通过java命令进行该jar。编译与运行        1,建立一个以.kt为后缀名的文件——Kotlin的文件以

2017-05-19 18:03:13 5618

原创 使用Android Studio+Kotlin开发

参考        Studio配置Kotlin:参考        扩展插件的使用:参考。 findViewById的替代        1,配置如下信息:import kotlinx.android.synthetic.main..*其中表示当前使用的布局文件名。        2,直接使用id做为相应的组件,调用各自的方法。如下:import kotlinx.

2017-05-19 16:46:47 1751

原创 泛型入门

基础        泛型在运行时会被擦除,

2017-05-04 19:07:49 294

原创 NestedScrollingParent

常用方法        onStartNestedScroll(View child, View target, int nestedScrollAxes):用于判断当前View是否接收嵌套滚动,返回为true的话,则表示该View接收嵌套滚动——并对嵌套滚动进行处理。target:当前触摸在的View;child:target的父类,并且是接收嵌套滚动View的直接子类,nestedScro

2017-04-10 23:14:52 581

原创 MD中的动画

参考        官网共享元素转场动画        使用前,开启硬件加速,否则无效果(对一部分手机即使关闭硬件加速,可能还会有效果,但有一部分手机是没有效果的)。示例如下:Pair pair2 = Pair.create(image, "image"); ActivityOptionsCompat compat = ActivityOptio

2017-03-16 17:21:44 1876

原创 访问者模式

定义        表示一个作用于某对象结构中各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。关键字        操作分离——将一个类中操作与这个类进行分离,在不改变这个类的前提下可以定义新的操作。适用性        1,一个对象结构中包含很多类对象,它们有不同的接口,但想对这些对象定义一些依赖于其具体类的操作。此时使用访问者模式可以避免对对象

2016-12-26 18:36:31 300

原创 迭代器模式

定义        提供一种方法顺序地访问一个集合对象中各个元素,而又不需要暴露该对象的内部表示。        对于一个集合来说,它应该有提供一种方法让外界可以对它进行遍历,同时根据不同的需求也需要支持多种遍历方式。由于不能预知所有的遍历需求,所以不可能在集合中写出所有的遍历逻辑(即使能预知所有的需求,也不应该在集合中写出所有的遍历方式)。        迭代器模式可以解决这个问题,

2016-12-09 18:39:32 378

原创 ViewPager与PagerAdapter

PagerAdapter常用方法        getPageWidth():获取子View占ViewPager的宽度比。默认时该方法返回1,所以ViewPager每一次只可以显示一个完整子View。可以将方法返回值调用,就可以一次性显示多个。ViewPager常用方法        setPageMargin():设置各Page之间的margin。        setO

2016-11-29 18:40:13 829

原创 adb,aapt等命令使用

adb shell        首先运行adb shell,此时光标前面会变成$。        ls:列出当前目录下的所有文件和文件夹。        mkdir:创建文件夹,make directory的缩写。        pwd:列出当前所在的目录。        cd:进入到某一个目录,change directory的缩写。定义文件路径时:..代表当前目录的上一级

2016-11-22 18:46:02 3796

原创 反编译

方法一        1,使用apktool将一个apk文件给反编译成smali文件,并拿到其清单文件与资源文件。使用apktool.bat或者apktool.jar。示例如下: apktool d aa.apk ————这是使用apktool.bat进行 java -jar apktool.jar d aa.apk ————这是使用apktool.jar进行反编译。所有使用jar文件的方

2016-11-17 14:52:19 609

原创 glide

配置混淆 -keep public class * implements com.bumptech.glide.module.GlideModuleokhttp        官方链接。        要注意:一定要忽略OkHttpGlideModule的混淆。自定义配置与GlideBuilder        实现GlideModule接口,并在清单文件中如同o

2016-10-23 17:05:59 677

原创 Volley之ImageLoader与NetworkImageView

简单使用        ImageLoader是volley中用来加载图片的工具类。使用如下:mImageLoader.get(IMAGE_URL, ImageLoader.getImageListener(mImageView, R.drawable.def_image, R.drawable.err_image))        创建ImageLoader时,需要

2016-10-21 17:07:25 395

原创 上下扫描以及扩散扫描

效果图思路        显示图片,所以继承ImageView。        图片有两种状态:一种是正常状态,一种是有较暗状态。较暗状态是将按一定的透明度比例绘制正常的图片即可。代码public class DakaImageView extends ImageView { /** * 从上往下刷新 */ private sta

2016-10-08 10:57:24 729

原创 gson使用

toJson        gson的方法可以分为两类:将对象转换为json,将json解析为对象。        toJson(Object,Appendable):将json串生成到指定的位置。第二个参数比较常见的如StringBuffer,StringBuilder以及Writer和它的子类。        toJson(Object):将obj转换为json数据,不能处理基本数

2016-09-08 18:34:42 3631

原创 圆背景组件以及数字红点

效果        如图:        这种形状实现起来无难度,但恶心。用drawable画一个圆做为背景,然后调整圆的宽高,文字的大小,使其刚好合适即可。但文字大小、背景的颜色只要一换,就得重新写drawable。因此可以重写textview在onDraw()方法中先绘制一下圆形即可。代码 public static final int STYLE_FILL = 2;

2016-09-08 13:41:39 385

原创 内存优化

studio        使用android studio中的monitors可以获取内存变化的hprof文件,并且也可打开该文件。FinalizerReference        参考        分析内存时,FinalizerReference对象占了很大的内存,它内部引用了重写了finalize()方法的对象。其一部分代码为: // This queu

2016-08-31 17:51:00 2026

原创 门面模式与中介者模式

门面模式概念        为子系统的一组接口提供一个统一使用的界面。它方便了外界对子系统的使用,减少了学习成本——一般的用户只需要了解门面类即可,不需要了解子系统内部的各种处理逻辑。但,外界并不是只能通过门面类访问子系统,可以直接绕过子系统访问子系统的底层。        门面类并不参与子系统的各种逻辑,它只是一个为了方便外界使用的接口。因此,子系统内部并不知道门面类的存在。而且门面

2016-08-23 11:37:41 688

原创 装饰模式

定义        动态的给一个对象添加一些额外的功能。就添加功能来说,装饰模式比继承更灵活。关键词        灵活——装饰模式比继承要灵活得多。        动态、透明——外界不需要区分当前使用的是装饰者还是被装饰者。因为两者具有相同的接口。        撤销——可以很方便地撤销对某个对象的装饰操作。使用场景        1,在不影响其他对象的情况下,为某一

2016-08-19 12:50:34 357

原创 volley之缓存、网络与重试

基础        volley对所有的请求都有本地缓存,对同一请求一般先从缓存中获取,获取不到再从网络获取。通常对图片进行三级缓存也是同样的思路。CacheDispatcher        为一个Thread,run()是一个死循环。与网络方交互的逻辑如下: Cache.Entry entry = mCache.get(request.getCac

2016-08-15 18:27:33 607

原创 适配器与组合模式

定义        将一个类的接口转换成客户希望的另外一个接口,适配器模式使原本由于接口不兼容而不能一起工作的类可以一起工作。关键词        转换、兼容——转换接口,使不能兼容的接口可以兼容。分类        类适配器与对象适配器。        类适配器:继承或实现多个接口,使该类可以在不同的系统中使用。如系统A有接口IA,系统B有接口IB,定义类Adapter即

2016-08-10 18:06:48 813

原创 Volley之ByteArrayPool——LruCache实现

基础        其主要作用是byte[]的缓存池,可以指定最大的缓存的byte数目。当缓存的byte数目超过指定的最大值时,以LRU策略进行回收。在频繁进行I/O操作时,如果不停地创建byte[],会导致堆内存的极速消耗,因为gc的回收并不是太及时。原理        用一个有序集合存储缓存的byte[],用另一个集合存储待删的byte[]——在缓存池满了的时候删除该集合中的最前面

2016-07-26 18:16:38 1758

原创 HttpURLConnection入门

参考        参考一Http请求        一次请求时,会有一个请求头(Request Headers),这里面存储的就是一些元数据——并不是自己想传给服务器的请求参数,而是一些类似于配置信息的数据——这些数据都是以键值对的形式存在。如Accept-Language:zh-cn表示浏览器能接收的语言为简体中文。请求头中的键值对有W3C定义好的,也可以是自定义的。   

2016-07-22 11:49:50 522

原创 BottomSheetDialog

参考        参考一基础        底部弹起的view或dialog。其实现关键也是CoordinatorLayout与Behavior。View形式        view形式的展开是通过BottomSheetBehavior实现的。此时有两个前提:        1,View类必须支持嵌套滚动。        2,View类必须是Coordinator

2016-07-18 18:02:35 7726

原创 状态栏一体化

基础        只兼容4.4以上的版本。theme        通过theme进行配置。需要分为三类:v19以前,v19-v21以及v21以后。v19(无特殊设置)以前如下: values-v19,如下: true true false values-21如下: true

2016-07-05 18:45:34 442

原创 Git之分支

基础        参考        在一个分支上操作并commit后,不会影响另一个分支。基本操作        git checkout -b dev master:从master分支上新建dev分支。master dev都是分支名,不固定。如果省略master,那就是表示从当前分支上建立新分支。        git checkout dev:切换到dev分支。de

2016-07-05 13:42:35 338

原创 NavigationView,AppBarLayout与CollapsingToolbarLayout

NavigationView        在上面示例中,菜单项是通过listview自己添加的,而android support design包中提供的NavigationView是专门用来显示菜单项的。        它与toolbar一样,也是加载menu文件。常用属性        headerLayout:菜单项的头。可选。headerLayout中的组件必须等navVi

2016-07-01 16:04:29 1000

原创 ServiceManager入门

基础        系统启动时,各个Service(非四大组件中的Service)都需要向ServiceManager中注册,由ServiceManager统一管理,如ActivityManagerService,PackageManagerService,WindowManagerService等。而client进程与这些Service通信时,首先需要向ServiceManager中查找相应

2016-06-22 11:27:36 1738

原创 Binder入门

IInterface        IPC时,server向client提供的是一套接口,这个接口定义了server能提供的操作,而这个接口必须继承IInterface。对它的官方说明如下: Base class for Binder interfaces. When defining a new interface,you must derive it from IInterface.

2016-06-21 16:00:20 580

原创 ViewRootImpl入门

基础        它本身只是一个很平常的类(据说早期的ViewRootImpl是一个Handler,然而api23中它便不是)。构造函数        ActivityThread#handleResumeActivity()->WindowManagerImpl#addView()->WindowManagerGlobal#addView()->ViewRootImpl(view.

2016-06-17 15:34:05 2650

原创 Window与PhoneWindow入门

Window基础        其子类为PhoneWindow。构造方法        在Activity#attch()中,会执行new PhoneWindow(this),因此Window中的mContext成员变量为它所关联的Activity。当然,在Activity中可以通过mWindow指向一个PhoneWindow实例。setWindowManager()

2016-06-17 15:33:23 2847

原创 Activity入门(二)

相关类        与Activity相关的类有很多,彼此之间通过一些变量都可相互引用。如下:        从上图可以看出,每个Activity实例中都含有一个DecorView对象,ViewRootImpl对象,以及WindowManager.LayoutParams对象()——它是DecorView对应的LayoutParams,三者之间的关联由WMG维护(由于WMI完全委

2016-06-17 15:31:01 707

原创 WindowManagerImpl,WMG与WMS入门

基础        每一个Activity(包括dialog)都有一个Window对象,而它们显示的布局又是添加到该Window对象中的mDecor中的。而mDecor又是通过WindowManager#addView()才展示出来的。这一点可查看AlertDialog,或者是见ActivityThread中的一部分代码,如下: if (r.window == nul

2016-06-15 21:13:15 2359

原创 AlertDialog入门

基础        它一般是用来提醒用户进行确认等操作的。如用户要删除一个信息,就需要提醒用户是否确定要删除。因此它叫“提醒对话框”。内部使用的是建造者模式。AlertDialog        其内部有一个AlertController类型的对象mAlert,可以说整个alertdialog都是由它控制的。其中有一堆的setter方法,这些方法的实现也只是转手将参数交给了AlertC

2016-06-14 22:35:06 2436

原创 新模式以及设计模式比较

工厂方法与建造者        工厂方法专注于整体的创建,创建出来的对象完全相同。如BitmapFactory,调用其中的方法直接返回一个Bitmap,而无法对Bitmap进行任何的设置。        建造者,专注于部件的构建以及设置,通过一个部件一个部件的设置,精确的创建出一个复杂对象,并且对象完全不同。如AlertDialog.Builder,可以使用它设置title、message

2016-06-09 21:43:07 603

原创 模式汇总

参考        设计模式之禅——里面关于模式的定义基本上都是来自于该书。单例        一个系统中只有一个实例。        1,可以减少内存开支,实现数据共享。        2,单例为静态的,生命周期与应用一样长 。处理不好,容易造成内存泄漏。        3,单例可扩展为多例:一个系统中只有固定个数的实例。工厂方法        定义一个用于创建对

2016-06-07 23:38:51 596

空空如也

空空如也

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

TA关注的人

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