Android学习中遇到的优秀文章的总结(持续更新)

项目练习

  1. 通用的Android练习模版设置,此文章介绍了怎么提高练习项目的效率,我从中学到了学习建立公共库,让工程中的其它module都使用共同库的依赖,避免重复导入第三方依赖
  2. 为Activity设置统一标题栏,在项目使用过程中发现这样使用设置状态栏全透明不起作用。
  3. Android studio 自定义顶部工具栏toolBar
  4. Android中为layout创建子文件夹官方
  5. java折叠代码块
  6. gradle 各种版本下载
  7. Android Studio中使用Git进行代码管理(分支、合并)
  8. Android Studio 删除多余的import
  9. Android Tools 属性解决列表测试预览问题
  10. Android API Level对应Android版本一览表
  11. Android Studio如何给默认创建的activity添加注释头
  12. Android获取应用签名(开发版SHA1和发布版SHA1) keytool命令需要到jdk安装目录的bin下打开cmd执行

纠错

  1. 关于TaskExecutionException:Execution failed for task
    ':app:compileDebugJavaWithJavac’和
    ‘:app:transformJackWithJackForDebug’
    –对于tools:replace="android:icon"一样。如果同时存在则以,隔开
    tools:replace=“android:theme,android:icon”
  2. 当Retrofit2+RxJava2遇到为null的返回结果
  3. Android Studio 引用第三方包时,com.android.support 因版本冲突问题
  4. Manifest merger failed : Attribute application@appComponentFactory value
  5. 由于 Android P 限制了明文流量的网络请求,非加密的流量请求都会被系统禁止掉
  6. Androidx和Android support库共存问题解决
  7. App is not indexable by Google Search
  8. 包名不要用大写,要全小写

Gradle

  1. Gradle的几个配置文件
  2. Gradle的基本配置

事件

  1. android事件分发机制

系统UI

  1. Menu菜单显示图标

  2. ConstraintLayout各种居中的实现

  3. Android 一个字符串设置不同颜色

  4. Android布局中的空格以及占一个汉字宽度的空格的实现

  5. CheckBox选择框居于右边

  6. BottomNavigationView更换底部选中图标和未选中图标

  7. tablayout知识点

  8. 隐藏底部虚拟按键–导航栏

  9. Android动态添加View之addView的用法

  10. 设置控件不可点击 view.setClickable(false),在注册了点击事件后,此方法就不起作用了,可以根据状态动态注册点击事件

  11. 控件高度wrap_content时,可设置minHeight控制最小高度

  12. 代码设置drawableLeft setBounds方法一定要写在setCompoundDrawables之前

  13. 在Android布局文件中使用空格的方法

  14. android:clipToPadding–是否允许viewGroup在padding中绘制子view。默认情况下,此属性设置为true,即不允许。
    android:clipChildren–是否允许子view超出父view。默认是true,不允许。

  15. android布局带渐变阴影

  16. android资源字符串格式化—使用String.format和CDATA实现一个常见的效果

  17. Android View的五种状态值

  18. 腾讯X5 TBS换原生WebView

  19. EditText
    1. 详解EditText输入监听TextWatcher 又一篇TextWatcher
    2. Android之自定义EditText光标和下划线颜色
    3. 监听EditText获取焦点用setOnFocusChangeListener
    4. EditText禁止弹出软键盘(禁止编辑) setInputType(InputType.TYPE_NULL)
    5. EditText代码中设置InputType为密码setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD|InputType.TYPE_CLASS_TEXT)
    6. 设置minLines同时height必须为wrap_content不能指定高度。否则minLines会失效
    7. EditText横向滚动需同时设置三个属性android:inputType="text" android:maxLines="1" android:scrollHorizontally="true"亲测可用
    8. 限制输入长度(不区分中英文)edit_title.setFilters(new InputFilter[]{ new InputFilter.LengthFilter(getResources().getInteger(R.integer.title_max))});
  20. LinearLayout
    1. LinearLayout分隔符妙用
  21. RelativeLayout
    1. RelativeLayout的相关属性
  22. TextView
  23. RecyclerView
  24. NestScrollView
  25. ViewPager
    1. 浅谈android:clipChildren属性
    2. ViewPager使用详解(一):PagerAdapter
    3. ViewPager中如何判断当前具体属于哪个Fragment的方法
    4. viewpager高度自适应

图形绘制

  1. layer-list的基本使用介绍
  2. Android shape只有任意一边边框
  3. Android中shape属性详解

存储

  1. Android 存储路径浅析

网络相关

  1. Okhttp3拦截器-应用拦截器和网络拦截器的区别
  2. Okhttp日志拦截器,日志级别和只在开发环境输出日志
  3. HTTP Request Header 请求头理解
  4. Retrofit 2.0 使用
  5. Retrofit探索之路
  6. JAVA-使用gson校验字符串是否是json

Fragment

  1. Android Fragment 真正的完全解析(上)
    • 在这篇文章我学习到了,remove方法默认会销毁Fragment的实例,如果把Fragment加入到了回退栈addToBackStack(),remove方法则不会销毁Fragment实例,但是会依然会销毁视图层
  2. Android Fragment 真正的完全解析(下)
    • 在这篇文章我学习到了考虑到Fragment的复用,所有Fragment的通信都应该通过他们的管理者Activity来决定,不能是多个Fragment之间直接通信(尽管这样也可以达到目的),所以就用到了 接口回调
    • 当屏幕发生旋转或者应用长时间在后台被回收时Activity会重新启动(通过onCreate的参数Bundle savedInstanceState就可以判断Activity是否已经重建),Activity中的Fragment会被保存下来(用户输入的数据不会保存下来),但是会创建新的FragmentManager,新的FragmentManager会首先去获取保存下来的Fragment队列,重建Fragment队列,从而恢复之前的状态。所以在onCreat方法中,先判断savedInstanceState是否为null,为null则创建新的Fragment实例,不为null,则复用fragment队列中的Fragment
  3. Android Fragment 你应该知道的一切
    • 学习到了通过使用arguments来创建Fragment来实现activity向Fragment中传递数据,在Fragment的onCreate方法中获取数据(其实就是newInstance)
    • 不再一个Activity的Fragment传递数据,利用startActivityForResult
    • 在同一个Activity中的Fragmernt之间传递数据,一种是利用接口回调通过管理者Activity传递,一种就是本文的利用setTargetFragment传递
  4. Activity重建时保持Fragment状态的方法
    • 在这篇文章学习到了fragment重建时保存数据的一种方法
  5. 解决fragment重叠问题
    • 我加深了对Activity和fragment周期的了解

MVP

  1. 浅谈 MVP in Android,通过这篇文章我练习了第一个MVP的demo,我的demo–github地址

RxJava2

  1. 入门
    • 我学习到了如何创建基本的被观察者、观察者,以及他们之间的订阅关系
    • 被观察发送的3中事件onNext,onComplete,onError和ObservableEmitter(发射器)和Disposable(可以用来解除订阅关系)
    • 发送事件的规则,onComplete和onError的互斥
    • 观察者的完整回调,subscribe()只有一个Observer,即下游可以相应发送的任何事件。。观察者的不完整回调(subscribe()的多个重载方法),其中带有一个参数Consumer的方法,表示下游只关心onNext事件
  2. RxJava强大的线程控制(subscribeOn和observeOn)
    • 我学习到了正常情况下上游和下游工作在同一个线程中的,也就是收上游在哪个线程发送事件,下游就在哪个线程接受事件,所以在Activity中,我们在主线程创建一个Observable来发送事件,那么上游就 默认 在主线程发送事件;当然我们在主线程创建一个Observer来接收事件,那么下游就 默认 就在主线程接受事件
    • subscribeOn() 指定的是上游发送事件的线程, observeOn() 指定的是下游接收事件的线程,多次调用subscribeOn(),只有第一次有效,其余的都会忽略;多次调用observeOn() ,则每调用一次,下游的线程就会切换一次
    • 在RxJava中内置的几个主要线程,其中熟悉的Schedulers.io 和AndroidSchedulers.mainThread(引入RxAndroid才会有这个)
    • 当activity退出时,调用Disposable的ispose()方法切断订阅关系,以及有多个Disposable时,使用CompositeDisposable容器切断订阅关系
  3. map,flatMap,concatMap(变换操作符)
    • map:它可以把上游发送的事件转换成任意类型后再发送给下游
    • flatMap可以把上游发送的一个类型的事件变换为几种不同类型的事件(不同的上游),然后再把这些不同的类型事件合并后放在一个单独的上游,注意flatMap不能保证事件发送的顺序(例子:注册成功之后自动登录)
    • concatMap作用同flatMap,只不过是它能保证事件发送的顺序,此外我还学习到了 默认 情况下的事件流的执行顺序,先发送上游的一个事件,然后执行doOnNext,再执行下游的onNext,若上游事件发送失败,则不会执行不会执行doOnNext和onNext
  4. ZIP( 组合/合并操作符),它将多个上游的不同事件严格按照顺序组合成到一起发送给下游。
  5. ZIP的缺点
    • 我学到了订阅关系的同步和异步,当上下游在 同一个线程 工作时就是 同步 的订阅关系,也就是说上游每发送一个事件 必须 要等到 下游 接受处理完了以后才能接着发送下一个事件;当上下游工作在 不同的线程 中时,就是 一个 异步 的订阅关系,这个时候 上游 发送数据 不需要 等到 下游 接受,因为两个线程并不能直接进行通信。
  6. 关于ZIP缺点的解决办法
    • 我学到了过滤操作符filter()的使用,它能指定上游符合过滤条件的时事件发送到下游
    • 过滤操作符sample,它是每隔一段时间发送上游的数据
      7. Flowable作为上游
    • 我学习到了Subscription,它决定下游处理事件的能力,也可利用cancle方法切断订阅关系
      8. Flowable的策略

其它

  1. Java方法注释中,添加尖括号的方法
  2. 不一样的 Java 日期格式化大全
  3. Java利用正则去除所有HTML标签 replaceAll("<[^>]+>",""))
  4. postman中post请求下form-data、x-www-form-urlencoded、raw、binary的区别
  5. Java工具包中的Formatter类
  6. Matisse选择多余的图片报错,闪退
  7. java字符串0.5转成500((Double)(Double.valueOf("0.5" * 10000)).intValue()
发布了62 篇原创文章 · 获赞 45 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/parade0393/article/details/87363042