Android的悬浮窗式对话框

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、效果图如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值