- 博客(26)
- 资源 (1)
- 收藏
- 关注
原创 Flutter自定义标题栏之处理状态栏高度
App在很多情况下由于各种需求需要自定义标题栏,而在能够构建Android和IOS应用的Flutter中,如果不在Scaffold中使用AppBar会发现默认是沉浸式。 猜想:我们使用自定义标题栏好像需要知道状态栏的高度,我看到网上很多人想要自定义标题栏,却老是去找怎么获取状态栏的高度 解惑:其实并不用获取状态栏的高度,你想AppBar也是状态栏,它也需要知道状态栏的高度,它需要...
2018-08-27 12:57:14
16034
4
原创 代理模式之动态代理
代理模式(Proxy Pattern) :给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。 接口类interface ProxyInterface{ void testProxy();}实现类static class ProxyImpl implements Proxy...
2018-08-03 20:28:02
332
原创 Jetpack之Navigation源码学习(二)
如果有人不相信代码是简单的,那是因为他们没有意识到人生有多复杂。 本篇梳理NavGraph的构建和加载流程NavHostFragement#onInflate(Context context, AttributeSet attrs, Bundle savedInstanceState)@Override public void onInflate(Context...
2018-08-03 16:46:42
562
原创 Jetpack之Navigation源码学习(一)
Navigation源码学习 如果有人不相信代码是简单的,那是因为他们没有意识到人生有多复杂。 NavigationNavigation.findNavController(it).navigate(R.id.action_page)一句代码实现导航往往凝聚了多少智慧Navigation.findNavController()public stat...
2018-07-28 19:21:40
1768
原创 Retrofit与LiveData结合
Retrofit与LiveData结合写上题目有点不知道怎么写了的很短暂的尴尬 有个问题,为什么我们可以直接更改service接口方法的返回值。先解释一波,相信我们都对Rxjava+Retrofit使用很熟悉了吧,回忆一下步骤添加了Retrofit对Rxjava支持的依赖implementation 'com.squareup.retrofit2:adapter-rxj...
2018-07-19 18:31:42
5938
1
原创 ParameterizedType详解
ParameterizedType详解参数化类型public interface ParameterizedType extends Type { Type[] getActualTypeArguments(); Type getRawType(); Type getOwnerType();} 何为参数化类型列举一个实体类用代码来解释什么...
2018-07-19 15:24:02
29933
11
原创 AtomicBoolean意义何在
AtomicBoolean意义何在提供了一种在多线程中安全处理业务逻辑的方案private var started = AtomicBoolean(false)if (started.compareAndSet(false, true)) { call.enqueue(object : Callback<R> { ...
2018-07-19 11:46:40
4382
原创 RxJava操作符使用
一、创建操作Create使用一个函数从头开始创建一个Observable 一个形式正确的有限Observable必须尝试调用观察者的onCompleted正好一次或者它的onError正好一次,而且此后不能再调用观察者的任何其它方法。 Observable.create(new Observable.OnSubscribe<Integer>() { ...
2018-03-07 10:08:46
369
原创 DataBind配置及简要使用
配置在Moudle级的gradle里添加//使用dataBindingdataBinding { enabled true}简要使用布局<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"&...
2018-02-26 14:54:00
1418
原创 Kotlin+DataBinding报错
问题 Error:(6, 26) Unresolved reference: databinding Error:(10, 14) Unresolved reference: ActivityMainBinding解决办法Moudle级添加kapt { generateStubs = true}dependencies { ext{ ...
2018-02-26 14:10:00
912
原创 Constranint布局配置和使用教程
项目配置注:可从Api level 9开始使用ext{ constraint = '1.0.2'}implementation "com.android.support.constraint:constraint-layout:$ext.constraint" 可用约束类型相对定位边距居中定位环形定位可见性行为尺寸限制链虚拟助手注:...
2018-02-24 18:21:30
1129
原创 Android获取坐标细则
Android坐标系:x轴向右,y轴向下,z轴向上View相对坐标 getTop() View的上离x轴方向父布局的距离 getLeft() View的左离y轴方向父布局的距离 getBottom() View的下离x轴方向父布局的距离 getRight() View的右离y轴方向父布局的距离 注:这四个方法获取的坐标表示的是
2018-01-30 11:24:05
457
原创 Java设计模式(一)——面向对象设计原则
设计原则名称 定义 单一职责原则 (Single Responsibility Principle, SRP) 一个类只负责一个功能领域中的相应职责 开闭原则 (Open-Closed Principle, OCP) 软件实体应对扩展开放,而对修改关闭 里氏代换原则 (Liskov Substitution Principle, LSP) 所有引用基类对象
2018-01-23 14:25:59
299
原创 RxLifecycle使用
一、添加依赖//rxLifeCyclecompile 'com.trello:rxlifecycle:1.0'compile 'com.trello:rxlifecycle-components:1.0'二、Activity/Fragment需继承RxAppCompatActivity/RxFragment目前支持的有RxAppCompatActivity、RxFragment、
2018-01-18 09:56:59
573
原创 RxJava创建之骚操作
Timer个人理解:订阅后经过一定时间返回一个可观察对象 骚操作: /** * 延迟执行 * @param delayTime 延迟时间(单位秒) * @return Observable */ public static Observable delayDo(int delayTime){ return Observa
2018-01-17 17:32:11
437
原创 RxJava过滤之骚操作
Debounce个人理解:经过一定时间结束,会发送这一定时间内最近的一项数据(若两个一定时间内重复了则不发送数据,则等待最后一个时间结束发送最近的一项数据) 骚操作:/** * 搜索防频繁请求 * @param textView view * @param time 单位毫秒 * @return Observable */public static Observable
2018-01-17 17:23:27
379
原创 RxJava使用小结
一、Obserable一个观察者(Observer)订阅一个可观察对象(Observable)。观察者对Observable发射的数据或数据序列作出响应。 val obserable = Observable.just(1) obserable .subscribe({ t: Int? -> })二、Single名为Single的Observable变种 Sin
2018-01-17 11:32:54
249
原创 Android混淆
混淆使用android { ... buildTypes { release { minifyEnabled true zipAlignEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'pr
2018-01-16 11:45:29
256
原创 Fragment判断可见性
判断可见性addFragment或者replaceFrament@Overridepublic void onResume() { super.onResume(); //TODO now visible to user}@Overridepublic void onPause() { super.onPause(); //TODO now in
2018-01-12 14:15:31
3686
原创 使用kotlin
在项目依赖中添加 classpath “org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.51” 在app的gradle中添加 apply plugin: ‘kotlin-android’ apply plugin: ‘kotlin-android-extensions’
2017-11-17 13:03:27
378
原创 从点击屏幕到事件处理的事件分发源码流程
从点击屏幕到事件处理的事件分发源码流程有事没事先来张图 怎么打印出来的,代码先奉上 Thread.dumpStack(); 在dispatchTouchEvent(MotionEvent event)方法中执行该方法通过以上方法,可打印出从点击屏幕到执行dispatchTouchEvent(MotionEvent event)的执行流程,感觉以后分析再也不用去一个个方法去找了直接根据流程来就是
2017-11-07 13:20:31
424
原创 StartActivity路上的mParent
源码基于API26 mParent干嘛来着,带着这个疑问上车了通过源码发现在Activity中attach()方法中赋值了,事实上还有个方法也可以赋值,即setParent(Activity parent). 不多说直接看attach()final void attach(Context context, ActivityThread aThread, Instr
2017-10-18 22:50:57
871
1
原创 源码探探之startActivity(二)
源码基于API26 在上一篇中,讲到由ActivityThread启动activity了 ActivityThread即我们平时提到的主线程,上一篇中AMS处理启动activity的task和record信息后通过binder跨进程到应用当前线程继续启动activity 现在看ActivityThread的scheduleLaunchActivity()@Override public
2017-10-18 10:04:42
400
原创 源码探探之StartActivity(一)
源码基于API 26 startActivity()上车@Overridepublic void startActivity(Intent intent) { this.startActivity(intent, null);}没什么好说的//启动一个activity不需要返回值//如果context之外调用startActivity(),需要给intent添加{@link I
2017-10-18 10:04:03
1148
原创 ToolBar
一、ToolBar样式使用一览android.support.v7.widget.Toolbar 1、include<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.andro
2017-07-20 12:48:10
366
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人