Android几种弹窗的实现

本文介绍了三种Android弹窗实现方式:直接使用Dialog及其子类AlertDialog、利用系统弹窗TYPE_SYSTEM_ALERT及通过Activity实现。每种方式都有其特点与限制,如依赖Activity环境、兼容性问题等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 直接使用android sdk里面的Dialog以及子类AlertDialog,这种弹窗要求依赖Activity环境,如果传入的context不是activity就会报错,所以这种弹窗是和界面强相关的

  2. 使用系统弹窗:TYPE_SYSTEM_ALERT,而且要加权限:android.permission.SYSTEM_ALERT_WINDOW

AlertDialog.Builder dialog = new AlertDialog.Builder(context);
        dialog.setInverseBackgroundForced(false);
        dialog.setCancelable(true);
        AlertDialog systemDialog = dialog.create();
        systemDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);

这种弹窗不会依赖于app的activity界面,就算app退回到主界面,这种系统弹窗依然可以弹出来,但是由于是系统弹窗所以就跟系统有关,会有兼容性问题,例如我遇到的小米4c手机就默认不允许系统弹窗,要到设置里面去打开允许的开关才能弹出来,而且系统弹窗默认的外观都很难看,因此可通过getWindow().setContentView(View)来自定义弹窗的布局内容,这时候也有兼容性问题,还是小米4c,就算你允许了系统弹窗,系统弹窗谈出来了,但是弹窗里面自定义的按钮点击事件全部都无效。
3. 使用Activity来实现弹窗,采用这种方式我觉得是最好的方式,因为它就是一个activity,只不过是弹窗模式,配置文件里面可以这么配置:

<activity android:name=".view.setting.update.WifiAlertDialog"
            android:launchMode="singleTask"
            android:theme="@style/CustomDialog" />

<style name="CustomDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:background">@drawable/land_popup</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowNoTitle">true</item>
    </style>

只需要startActivity就可以了,但是在startActivity的时候传进去的context如果不是activity类型,而且launchMode=”singleTask”那也会报错,不过可以通过设置flag来解决:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值