项目中有一个到时锁屏的的功能,就是当到达特定时间后,程序弹出一个蒙层将界面锁住,用户不能进行其他操作 (ps:按home键和back键蒙层也还在),除非输入密码或按规定操作,才可移除蒙层。
现将关键的使用代码简化贴出以供参考:
public class MainActivity extends Activity { private WindowManager.LayoutParams param; private WindowManager windowManager; private RelativeLayout mInView; private Button btn; private void initView() { windowManager = (WindowManager) getApplicationContext() .getSystemService(Context.WINDOW_SERVICE); param = new WindowManager.LayoutParams(); LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); // 加载需要的XML布局文件 mInView = (RelativeLayout) inflater.inflate(R.layout.activity_main, null, false); btn = (Button) mInView.findViewById(R.id.btn); } public void addWindow() { // param.format = PixelFormat.RGBA_8888; // 背景透明 param.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;// 等于2003,意思是:系统提示,它总是出现在应用程序窗口之上 // param.gravity = 51; // 让该window后所有的东西都成暗淡(dim) param.format = 1; // param.alpha = 0.9f; param.type = 0x00000200;// 允许窗口扩展到屏幕之外,相当于满屏作用 // param.flags = 0x00000200; if (windowManager == null) windowManager = (WindowManager) getApplicationContext() .getSystemService(Context.WINDOW_SERVICE);// 获取WindowManager服务: try { windowManager.addView(mInView, param);// 添加view到屏幕 } catch (Exception e) { e.printStackTrace(); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); addWindow(); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // 移除windowview if (mInView != null) { windowManager.removeView(mInView); } } }); } }
其中关于windowmanager的相关信息网上有很多介绍,这里不再赘述。大家可以根据自身的实际情况对WindowManager.LayoutParams参数进行设置来满足不同需求。