WindwManager.LayoutParams
WindowManager.LayoutParams是WindowManager接口的嵌套类;它继承于ViewGroup.LayoutParams; 它用于向WindowManager描述Window的管理策略。
主要成员常量
Window flag系列
该系列主要用于对Window的flag进行设置。
设置Window的flag,可以直接对Window的getAttributes()得到其 WindowManager.LayoutParams对象,然后直接对它flag变量操作。
也可以Window的addFlags(int flags)方法,setFlags(int flags, int mask)方法,clearFlags(int flags)方法进行操作。
- windowTranslucentStatus 可以拉升到顶部状态栏,并且定义顶部状态栏透明
android:windowTranslucentNavigation 设置虚拟键透明
/** * 设置沉浸式状态栏 */ public static void setImmersive (Activity activity) { Window window = activity.getWindow(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //可以拉升到顶部状态栏,并且定义顶部状态栏透明 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 导航条隐藏, decorView占据全屏,沉浸式 window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |View.SYSTEM_UI_FLAG_FULLSCREEN |View.SYSTEM_UI_FLAG_IMMERSIVE); } }
关于WindowManager.LayoutParams更多细节可以参考这篇文章
http://blog.csdn.net/i_lovefish/article/details/8050025
/**
* 设置透明状态栏
* @param activity 需要设置的Activity
*/
public static void translucentWindow(Activity activity)
{
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
Window window = activity.getWindow();
//取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//DecorView布局充满全屏但状态栏显示, 隐藏虚拟按键. 稳定布局
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
//需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//设置状态栏颜色
window.setStatusBarColor(Color.TRANSPARENT);
window.setNavigationBarColor(Color.TRANSPARENT);
}
}