Android中的悬浮式对话框调出后,无论是物理返回键,Home键还是锁屏键,都无法取消掉。锁定手机的不二之选!!
来看代码实现:
1、悬浮窗权限申请!悬浮窗权限申请!!悬浮窗权限申请!!! 重要的事说三遍。特别是Android6.0以后的手机,特别要注意!但是这个权限动态申请与一般的动态权限申请方式有点区别。至于怎么申请,可点击 Android 6.0悬浮窗权限申请
2、在Activity中调用,这里是通过按钮触发。也可以写在服务中!!
private void showDialog() { View view = View.inflate(getApplicationContext(), R.layout.dialong_layout, null); AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext()); Button btn_ok = (Button) view.findViewById(R.id.btn_ok); Button btn_no = (Button) view.findViewById(R.id.btn_no); btn_ok.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "点击了OK", Toast.LENGTH_SHORT).show(); //取消对话框 alertDialog.dismiss(); } }); btn_no.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getApplicationContext(), "点击了NO", Toast.LENGTH_SHORT).show(); } }); builder.setView(view); builder.setTitle("我是悬浮窗"); builder.setIcon(R.mipmap.ic_launcher); alertDialog = builder.create(); Window window = alertDialog.getWindow(); window.setWindowAnimations(R.style.WindowDialog); window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); WindowManager.LayoutParams layoutParams = window.getAttributes(); layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; layoutParams.height = ViewGroup.LayoutParams.WRAP_CONTENT; alertDialog.onWindowAttributesChanged(layoutParams); //设置弹出框失去焦点是否隐藏,即点击屏蔽其它地方是否隐藏 alertDialog.setCanceledOnTouchOutside(true); //设置按钮是否可以按返回键取消,false则不可以取消 alertDialog.setCancelable(false); alertDialog.show(); }
View的布局文件就是一个简单的线性布局 dialong_layout.xml的布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/btn_no" android:layout_width="0dp" android:layout_weight="1" android:layout_margin="10dp" android:text = "取消" android:layout_height="wrap_content"/> <Button android:id="@+id/btn_ok" android:layout_width="0dp" android:layout_weight="1" android:layout_margin="10dp" android:text = "确定" android:layout_height="wrap_content"/> </LinearLayout>
3、效果图如下: