零碎知识点笔记

组件化实现

组件化2

1、关于MediaType

MediaType:指的是要传递的数据的MIME类型(描述消息内容类型的因特网标准)

MediaType对象包含了三种信息:type 、subtype以及charset,
一般将这些信息传入parse()方法中,这样就可以解析出MediaType对象,
比如 “text/x-markdown; charset=utf-8” ,

  • type值是text,表示是文本这一大类;
  • /后面的x-markdown是subtype,表示是文本这一大类下的markdown这一小类;
  • charset=utf-8 则表示采用UTF-8编码。

如果不知道某种类型数据的MIME类型,可以参见链接Media Type和MIME 参考手册,较详细的列出了所有数据的MIME类型。

json : application/json
xml : application/xml
png : image/png
jpg : image/jpeg
gif : imge/gif

MediaType contentType = responseBody.contentType();
根据 mediaType 可以获取response中数据类型

2、关于硬件位图

Bitmap.Config.HARDWARE 是一种 Android O 添加的新的位图格式。硬件位图仅在显存 (graphic memory) 里存储像素数据,并对图片仅在屏幕上绘制的场景做了优化。
但是硬件位图有一些情况下不支持。

3、参数化类型 ParameterizedType

/**
 * 普通类反射获取泛型方式,获取需要实际解析的类型
 * 在网络请求回调函数设计中,cls 通常是 基础回调函数的实现类
 * Demo:
 *      Basecallback:  public abstract class BaseHttpCallBack { ... }
 *      Implcallback: new BaseHttpCallBack () {
 *                         public void onSuccess(T t) { ... }
 *                     }
 *     Implcallback 是一个匿名内部类,是 BaseHttpCallBack 的子类、实现类
 *     所以:Implcallback 的 直接超类的 Type 就是 T
 *          Implcallback.getClass().getGenericSuperclass();//拿到的是 Basecallback的泛型 T
 * 
 */
public static  Type findNeedClass(Class cls) {// 返回当前正在运行时的类所对应的对象
    Type genType = cls.getGenericSuperclass();// 当前对象的直接超类的 Type   BaseHttpCallBack
    Type finalNeedType = null;
    if (genType != null) {
        Type[] params = ((ParameterizedType) genType).getActualTypeArguments();// 返回泛型参数数组
        Type type = params[0];// T
        if (params.length > 1) {
            if (!(type instanceof ParameterizedType)) {
                throw new IllegalStateException("no parameterizedType....");
            }
            finalNeedType = ((ParameterizedType) type).getActualTypeArguments()[0];
        } else {
            finalNeedType = type;
        }
    }
    return finalNeedType;
}

4、关于Rx compose(ObservableTransformer)操作符的理解

1、compose 是对ObservableSource本身进行操作的
2、compose(transformer) 接收一个参数 ObservableTransformer
ObservableTransformer: Upstream输入数据类型 Downstream输出数据类型

ObservableTransformer 可以用于对 Observe 本身的一些常用重复操作符(比如线程调度)做封装,
然后调用 Observe.compose(ObservableTransformer) 就调用了重复的操作符

类似:

public Object compose(new Transformer(this);

public class Transformer {
 	Object mObj;
 	public Transformer(Object obj) {
 		mObj = obj;
 	}
 	
 	public Object apply() {
 		mObj.xxx
 		    .xxx
 			.xxx;
 		return mObj;	
 	}
}

5、Observable.range(x, y)

range操作符的作用:Range操作符根据输入的初始值x 和 数目 y 发射一系列大于等于x 的 y 个值

6、EditText # inputType

switch (inputType) {
    case InputType.TYPE_CLASS_NUMBER://数字
    case InputType.TYPE_CLASS_PHONE | InputType.TYPE_CLASS_NUMBER://拨号键盘
    case InputType.TYPE_NUMBER_FLAG_DECIMAL | InputType.TYPE_CLASS_NUMBER://带小数点的浮点格式
    case InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_CLASS_NUMBER://带符号数字格式
    
    case InputType.TYPE_CLASS_DATETIME://日期
    case InputType.TYPE_DATETIME_VARIATION_DATE | InputType.TYPE_CLASS_DATETIME://日期键盘
    case InputType.TYPE_DATETIME_VARIATION_TIME | InputType.TYPE_CLASS_DATETIME://时间键盘
    case InputType.TYPE_DATETIME_VARIATION_NORMAL | InputType.TYPE_CLASS_DATETIME://时间键盘
        return true;
        
	case InputType.TYPE_CLASS_TEXT:
    case InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD:
    case InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_...:
        return false;
    default:
        return false;
}

子类型,后面需要加上【 | InputType.xxx 】才能与 xml中 android:inputType=“numberDecimal” 值相等

7、关于StateListDrawable

-android.R.attr.state_enabled 负号表示 false

val bgDrawable = StateListDrawable().apply {
            if (mEnableBg != 0) {
                val enableDraw = DrawableUtils.getDrawable(context, mEnableBg)
                if (enableDraw != null) {
                    addState(intArrayOf(android.R.attr.state_enabled), enableDraw)
                }
            }
            if (mUnEnableBg != 0) {
                val unEnableDraw = DrawableUtils.getDrawable(context, mUnEnableBg)
                if (unEnableDraw != null) {// 负号代表 false
                    addState(intArrayOf(-android.R.attr.state_enabled), unEnableDraw)
                }
            }
        }

你可能感兴趣的:(笔记)