获取当前Activity
使用ActivityLifecycleCallbacks回调获取create的Activity对象
添加View
使用Activity.addContentView(View view, ViewGroup.LayoutParams params)
移除View:Activity.removeContentView(View view)
将Content获取,在Content中手动添加View:
Content view 的ID为:
android:id/content
1 | public class ActivityExt { |
在整个屏幕中添加View
上面说的addContentView是在Content中添加View,有一定的局限性,如果想在整个屏幕中添加View,不如说水印、护眼壁纸等,就需要将content上面的actionBar、stateBar也添加View。
整个屏幕中能看见的部分都来自一个总的view——DecorView
- 获取DecorView:
FrameLayout decorView = (FrameLayout) getWindow().getDecorView();
- DecorView是一个FrameLayout,在里面直接
addView(View view, ViewGroup.LayoutParams params)
就可以添加View。
添加的View在整个FrameLayout布局的最上层,覆盖在Content的上面。如果添加的View有事件拦截的话,正常显示的Activity将无法获取事件消息。
添加View的需求评估
一般情况下,在Activity中手动添加View都是对整个app的页面统一添加,所以在需求评估时候需要确认使用场景,给出合理的方案,大型的app页面众多,不同的开发者为实现不同的效果,可能会对页面做不同的修改,全局添加的view在部分页面会出现崩溃。