android:View#scrollTo

2021-08-20
阅读 4 分钟
2.3k
首先看View#scrollTo(int x,int y),以x为例。当传入的x>0,View内容发生了滚动,并且沿着x轴的负方向滚动。why???
封面图

LifecycleEventObserver与DefaultLifecycleObserver的优先级

2021-08-09
阅读 3 分钟
4.6k
文档很清楚的说明了,如果一个观察者同时实现了DefaultLifecycleObserver和DefaultLifecycleObserver,DefaultLifecycleObserver要先于LifecycleEventObserver的onStateChanged调用。如果也添加了OnLifecycleEvent注解。那么注解会被忽略掉。

反射:Type

2020-05-30
阅读 3 分钟
2.5k
这里要特别强调一下什么是泛型类型,什么是类(对象)类型?比如:List<String>作为方法的返回值.它的泛型类型是ParameterizedType,它的类类型是List.泛型类型只有WildcardType,ParameterizedType,TypeVariable,GenericArrayType和Class<?>这五种.类类型其实就是这个类本身.

compileSdkVersion,targetSdkVersion和minSdkVersion

2020-04-02
阅读 1 分钟
2.6k
compileSdkVersion android项目编译时使用的sdk版本,建议使用最新的sdk版本,可以兼容最新版本的API。 假如方法A在api29才出现,当设置compileSdkVersion<29时,是无法使用到方法A的。 miniSdkVersion App安装时要求的设备的最低android版本。低于该版本,无法安装。 另外,在代码中,会根据miniSdkVersion来提示某...

Android:ViewStub

2019-07-08
阅读 3 分钟
4.4k
ViewStub是一个轻量级View,它是一个看不见的,并且不占布局位置,占用资源非常小的视图对象。可以为ViewStub指定一个布局,加载布局时,只有ViewStub会被初始化,然后当ViewStub被设置为可见时,或者是调用了ViewStub.inflate()时,ViewStub所指向的布局会被加载和实例化,然后ViewStub的布局属性都会传给它指向的布局...

java多线程:synchronized

2019-05-14
阅读 6 分钟
1.3k
synchronize可以在多个线程操作同一个成员变量或者方法时,实现同步(或者互斥)的效果。synchronized可以作用于方法,以及方法内部的代码块。

java多线程: 如何停止线程

2019-05-13
阅读 1 分钟
3k
线程停止的几种情况:1: 使用退出标记,run方法执行完毕,线程正常退出。2: 使用stop()方法,已过时的方法,不推荐。3: 使用interrupt()方法中断线程。

开源库Banner如何实现无限轮播

2019-04-11
阅读 2 分钟
2.6k
记得最初使用ViewPager实现无限轮播大致是这样的. {代码...} 在使用了开源库Banner后,感觉这个库处理无限轮播,写的非常好. 这个库可以左右无限滑动,也可以自动左右无限轮播. 首先先了解下,其大致原理. 在数据的前后两端各添加一条数据.前端添加的是最后一天数据,尾端添加的是第一条数据.如图: 当从C滑动到D时,在ViewPage...

使用ViewDragHelper自定义左右可滑动内容的ViewGroup

2019-04-09
阅读 4 分钟
3.3k
通过在自定义的ViewGroup内部使用ViewDragHelper,使得给自定义的ViewGroup在水平方向上并排按序添加多个子View(ViewGroup),可以实现水平左右滚动的效果,类似于ViewPager.

TabLayout与ViewPager结合时不显示Tab标题

2019-03-29
阅读 2 分钟
4.2k
当我们将TabLayout与ViewPager结合时,会出现Tab标题不显示的问题. {代码...} 从源码里找答案.先看下方法调用流程大致流程如图,这里只给出populateFromPagerAdapter()方法源码. {代码...} 这个方法的第一步 removeAllTabs();. {代码...} 移除了TabLayout添加的tab.下一步final int adapterCount = mPagerAdapter.getCount...

android-lifecycle笔记

2019-03-27
阅读 8 分钟
3.1k
继承ViewModel或者AndroidViewModel {代码...} 如果继承AndroidViewModel,构造函数必须有一个Application类型的参数,并且只能是Application,而不是其子类.

RxLifecycle笔记

2019-03-25
阅读 4 分钟
3k
添加依赖 {代码...} 在rxlifecycle依赖包下游如下几个关键类 RxLifecycle LifecycleProvider LifecycleTransformaer 在rxlifecycle-android-lifecycle依赖包下有如下几个关键类 AndroidLifecycle RxLifecycleAndroidLifecycle 不直接使用RxLifecycle,而是使用AndroidLifecycle. 如何创建AndroidLifecycle. {代码...} And...

RxJava2:线程调度

2019-03-14
阅读 7 分钟
3.2k
Observable.subscribeOn()在方法内部生成了一个ObservableSubscribeOn对象.主要看一下ObservableSubscribeOn的subscribeActual方法.

java:String

2019-03-04
阅读 2 分钟
1.6k
JVM会检测字符串常量池中是否存在这个值的字符串,如果存在,就直接赋值给str,否则创建一个新的,再赋值给str.当连续用同样的方式声明两个字符串并作比较

java: final

2019-03-01
阅读 1 分钟
1.8k
修饰类 final修饰类时表明这个类不能被继承,类中的成员方法默认是final类型. 修饰方法 被final修饰的方法不能被继承. 修饰变量 修饰基本类型变量 该基本类型变量不能再次被赋值. 修饰引用类型变量 该引用类型变量不能再指向其它对象,即所指向的地址值不能发生变化.但,该对象所包含的内容可以发生改变. {代码...} final与...

android: 高德地图

2019-02-20
阅读 7 分钟
3.9k
分为地图,定位,搜索(我还没做导航功能) 建议采用gradle方式集成 添加依赖 在project/build.gradle文件下添加jcenter的仓库地址 {代码...} 在app/build.gradle下添加依赖 {代码...} navi导航SDK 5.0.0以后版本包含了3D地图SDK,所以请不要同时引入 map3d 和 navi SDK。 添加权限 在AndroidManifest.xml文件下添加权限 {代...

RxJava2:Observable和Observer如何传递

2019-02-14
阅读 6 分钟
4.7k
以Observable为例,先上代码: {代码...} Observable传递 这里每次调用一个操作符,返回的都是Observable的直接子类或者间接之类.以just为例: {代码...} 这里重新new了一个Observable的子类对象ObservableJust. 结论如下: 每个操作符都会对应返回一个Observable的子类对象,类名格式ObservableXXX然后去调用下一个操作符.比...

java:强引用,软引用,弱引用和虚引用

2019-02-10
阅读 1 分钟
1.4k
如果一个对象具有强引用,垃圾回收器绝不会回收它.当内存空间不足时,java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题.

java:方法覆盖与方法重载

2019-02-09
阅读 1 分钟
2.5k
方法签名 方法签名是指方法的参数类型,顺序和个数.不包含方法名称. 重载 重载必须满足以下条件 方法名 相同 方法的参数类型,个数和顺序至少一项不同 方法的返回类型可以不同 方法的访问权限修饰符可以不同 覆盖 如果在子类中定义的一个方法,其名称,返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名...

Fragment的生命周期以及懒加载的简单实现

2018-12-13
阅读 4 分钟
4.3k
首先定义一个基类Fragment,重写所有生命周期方法,并打印log.假如现在有五个子类Fragment通过ViewPager左右滑动切换.刚进入页面时:

Retrofit + Kotlin请求接口时遇到问题

2018-06-17
阅读 1 分钟
9k
问题出在参数map的value类型Any.对于java来说,这个value的类型是Object,可以被Retrofit识别,但对于kotlin来说,retrofit会把Any识别成 ?,就报出了错误.解决办法:添加注解@JvmSuppressWildcards

监听开机广播开启service

2018-05-06
阅读 2 分钟
4.6k
每隔一分钟,系统会发送一次该广播,监听该广播,并通过第(3)步的代码来不间断的判断某个服务是否还存活。注意该广播无须在AndroidManifest.xml中注册

okhttp传递数组参数

2018-04-08
阅读 3 分钟
16.1k
采用okhttp+rxjava+retrofit向后台传递字符串数组参数,格式如下 {代码...} 最初定义了一个 {代码...} 然后转成字符串 {代码...} 但是这样得到的结果是 {代码...} 比较以上两种格式,发现格式不对.传给后台时,总是报参数错误的异常.解决办法:定义一个对象继承自okhttp3.RequestBody {代码...} 通过Retrofit定义请求接口API...

Execution failed for task ':app:compileDebugJavaWithJavac'

2018-04-07
阅读 6 分钟
20.2k
注意到这句话Task 'compileDebug' is ambiguous in root project 'DefineViewStudy'. 单词ambiguous是模糊不清的意思.尝试着把命令改为

自定义ViewGroup实现仿微信图片选择器

2017-09-16
阅读 5 分钟
2.1k
这里要重写onMeasure和onLayout。定义ViewGroup.LayoutParams的子类来保存view的left和top的属性。

更改Dialog的标题和按钮颜色

2017-08-26
阅读 3 分钟
7.6k
android.support.v7.app.AlertDialog 在这个类中第一行就定义了如下变量: final AlertController mAlert; AlertDialog的功能的具体实现都在这个AlertController内部封装. 修改按钮颜色 1. AlertDialog.getButton {代码...} 这里的参数whichButton有三种类型: DialogInterface.BUTTON_POSITIVE DialogInterface.BUTTON_NE...

Fragment切换时,MVP中的P不能被重新创建

2017-07-19
阅读 5 分钟
2.8k
把项目的登陆,注册和修改密码全部替换成Fragment,顺便通过简单的MVP模式来实现,简单记录下遇到的一些问题. 谁是V 这里把Fragment做为V,而不是宿主Activity.(具体原因有待深究,然而能力有限) Fragment的管理 登陆,注册和修改密码,一个三个Fragment,继承自基类的IBaseFragment,并各自对应自己的P和M. {代码...} 这里使用到...