Android 阅读笔记
layout_weight
layout_weight 重要性,默认的是 0,0 等级最高,要显示,数字越大重要性越低。
例:a,b 的宽度为 0,layout_weight 分别为 1、2,则 a,b 宽度分别为父容器的 2/3、1/3。
PendingIntent
PendingIntent 是封装后的 intent,有 intent 执行所需的 context,所以即使要执行 intent 的 activity 已经消失或者还没生成,其他 activity 依然可以通过 PendingIntent 执行 intent。
PendingIntent is a description of an Intent and target action to perform with it. Instances of this class are created with
getActivity(Context, int, Intent, int)
,getActivities(Context, int, Intent[], int)
,getBroadcast(Context, int, Intent, int)
, andgetService(Context, int, Intent, int)
; the returned object can be handed to other applications so that they can perform the action you described on your behalf at a later time.
也就是把自己要执行的 intent 和执行所需的 context 封装后给别人,请别人在适当的时候执行。
android 模拟器访问电脑 localhost
电脑localhost
或者127.0.0.1
访问本地网址。
模拟器访问localhost
会默认访问手机的本地网址,要访问电脑的本地网址则需要访问10.0.2.2:8080
,记得加上对应的端口。
获取屏幕画面
View decor = MainActivity.this.getWindow().getDecorView();
decor.setDrawingCacheEnabled(true);
imageView.setImageBitmap(decor.getDrawingCache());
获取网络信息,请求网络
需要请求权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
java 代码如下:
private void chackNetWork(Context context) {
boolean isNetAvailable = false;
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (manager.getActiveNetworkInfo() != null) {
isNetAvailable = manager.getActiveNetworkInfo().isAvailable();
}
if (!isNetAvailable) {
Toast.makeText(this, "open network", Toast.LENGTH_SHORT).show();
Intent intent = new Intent();
intent.setAction(Settings.ACTION_NETWORK_OPERATOR_SETTINGS);
context.startActivity(intent);
}
}
LiveData
LiveData
可以在数据有变化的时候调用订阅者并执行指定方法。
Transformations
有两个转化LiveData
的方法:map()
和switchMap()
。
map()
可以将一个LiveData
经过处理转化为另外一个LiveData
。
而switchMap()
则可以根据不同的需要切换不同的LiveData
。
val live = MutableLiveData<String>()
val d : LiveData<String> = map(live){
"this is $it"
}
val e = switchMap(live) {
return@switchMap when (it) {
"a" -> MutableLiveData<String>("a")
"b" -> MutableLiveData("b")
else -> MutableLiveData("else")
}
}
此外,LiveData
的子类MediatorLiveData
可以添加多个监听项,每个项目改变都会回调对应的onChange()
方法。
val mediatorLiveData = MediatorLiveData<String>()
mediatorLiveData.addSource(d) {
update(it, e.value)
}
mediatorLiveData.addSource(e) {
update(d.value, it)
}
fun update(a: String? = "", b: String? = "") {
//do sth
}