android WindowManager

项目中有一个到时锁屏的的功能,就是当到达特定时间后,程序弹出一个蒙层将界面锁住,用户不能进行其他操作  (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参数进行设置来满足不同需求。

猜你喜欢

转载自wqkerry.iteye.com/blog/2258646