在平时的开发中,经常遇到一些使用全屏弹窗的场景。今天,总结一下全屏弹窗的几种实现方法,大家可以结合自己的使用场景和习惯选择合适的方法。

实现全屏弹窗,我总结了三种方法:

(1)全屏Dialog

(2)全屏DialogFragment

(3)全屏Activity

在一般的情况下,使用Dialog即可,相信大家实现弹窗的第一选择都是Dialog,这也是最简单的方式。其实,大家可以尝试一下DialogFragment,除了能实现Dialog的界面和功能外,因为它本身是Fragment,所以,它有自己的生命周期管理。这里需要注意一点,DialogFragment只能在Activity中去使用。至于全屏Activity,其实它的实现与前两种方式差不多。但是,在有些场景下,或许使用全屏Activity实现弹窗是更合适的方法。大家都知道,我们弹Dialog是需要依附一个Activity的。假如我们要依附的Activity处于非alive状态,那么我们无法弹出Dialog。当然,也可以通过弹出悬浮窗的方式弹系统窗口。但是,这是另外一种比较流氓的场景,我们不多介绍。

一.全屏Dialog

public class FullScreenDialog extends Dialog {private TextView mBtn1;private TextView mBtn2;private ImageView mClose;private OnDialogClickListener mListener;public FullScreenDialog(@NonNull Context context) {super(context, R.style.FullScreenDialog);initView(context);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);WindowManager m = getWindow().getWindowManager();Display d = m.getDefaultDisplay();WindowManager.LayoutParams p = getWindow().getAttributes();p.height = d.getHeight();p.width = d.getWidth();getWindow().setAttributes(p);}public void initView(Context context) {View view = LayoutInflater.from(context).inflate(R.layout.dialog_layout, null);setContentView(view);setCancelable(false);setCanceledOnTouchOutside(false);mBtn1 = view.findViewById(R.id.tv_1);mBtn2 = view.findViewById(R.id.tv_2);mClose = view.findViewById(R.id.close);mBtn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (mListener != null) {mListener.onBtn1Click();}dismiss();}});mBtn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (mListener != null) {mListener.onBtn2Click();}dismiss();}});mClose.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {dismiss();}});}public void setOnDialogClickListener(OnDialogClickListener listener) {mListener = listener;}public interface OnDialogClickListener {void onBtn1Click();void onBtn2Click();}
}

二.全屏DialogFragment

public class FullScreenDialogFragment extends DialogFragment {private TextView mBtn1;private TextView mBtn2;private ImageView mClose;private FullScreenDialog.OnDialogClickListener mListener;@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {final Window window = getDialog().getWindow();if (window != null) {window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));window.requestFeature(Window.FEATURE_NO_TITLE);window.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);}setCancelable(false);View view = inflater.inflate(R.layout.dialog_layout, container, false);initView(view);return view;}@Overridepublic void onResume() {super.onResume();final Window window = getDialog().getWindow();if (window != null) {WindowManager.LayoutParams params = window.getAttributes();params.height = WindowManager.LayoutParams.MATCH_PARENT;params.width = WindowManager.LayoutParams.MATCH_PARENT;params.gravity = Gravity.TOP;window.setAttributes(params);}}private void initView(View view) {mBtn1 = view.findViewById(R.id.tv_1);mBtn2 = view.findViewById(R.id.tv_2);mClose = view.findViewById(R.id.close);mBtn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (mListener != null) {mListener.onBtn1Click();}dismiss();}});mBtn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (mListener != null) {mListener.onBtn2Click();}dismiss();}});mClose.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {dismiss();}});}public void setOnDialogClickListener(FullScreenDialog.OnDialogClickListener listener) {mListener = listener;}public interface OnDialogClickListener {void onBtn1Click();void onBtn2Click();}
}

三.全屏Activity

public class FullScreenDialogActivity extends AppCompatActivity {private TextView mBtn1;private TextView mBtn2;private ImageView mClose;public static void startActivity(Context context){Intent intent = new Intent();intent.setClass(context,FullScreenDialogActivity.class);context.startActivity(intent);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.dialog_layout);final Window window = getWindow();if (window != null) {WindowManager.LayoutParams params = window.getAttributes();params.height = WindowManager.LayoutParams.MATCH_PARENT;params.width = WindowManager.LayoutParams.MATCH_PARENT;params.gravity = Gravity.BOTTOM;window.setAttributes(params);}initView();}private void initView() {mBtn1 = findViewById(R.id.tv_1);mBtn2 = findViewById(R.id.tv_2);mClose = findViewById(R.id.close);mBtn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {finish();}});mBtn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {finish();}});mClose.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {finish();}});}
}

通过比较这三种方式的代码,我们可以发现,其实最根本的就是设置window的一些参数和属性,而这三种方式会有一点差异。相信代码不难理解,我也不过多的介绍了。

全屏Dialog的几种实现相关推荐

  1. html 布局满屏,CSS全屏布局的5种方式

    前面的话 全屏布局在实际工作中是很常用的,比如管理系统.监控平台等.本文将介绍关于全屏布局的5种思路 思路一: float [1]float + calc 通过calc()函数计算出.middle元素 ...

  2. android webview 横竖屏_WebView实现全屏播放的一种方法

    用过WebView的开发者们肯定都知道这里面的坑数不胜数,加载缓慢,内存泄露,文件选择......没错,全屏播放视频,这又是一个大坑.一个没有修饰过的原生WebView几乎不可能在某一个主流视频网站实 ...

  3. MFC中主副屏窗口全屏最大化的几种方法

    MFC中主副屏窗口全屏最大化的几种方法 1.根据鼠标位置判断全屏位置 枚举所有窗口 CArray<MONITORINFO, MONITORINFO&> g_arrMonitorIn ...

  4. 如何让Android对话框全屏 Dialog 全屏

    如何让一个对话框全屏对话框: <style name="Theme.Application.Dialog.Alert" parent="android:Theme. ...

  5. android dialog 横向全屏,Dialog全屏,去掉状态栏的方式

    dialog即使设置全屏了,但还是有状态栏占用高度这: 直接将下面这行代码放到你的dialog中即可 @Override protected void onStart() { super.onStar ...

  6. excel2016html,Excel2016中切换至全屏视图的两种方法

    在Excel工作表的使用过程中,有时因为工作表中的内容较多,无法在当前屏幕中完整显示,这时切换到全屏视图来查看要更方便一些.在Excel 2016中切换至全屏视图,主要有以下两种方法: 方法一:使用快 ...

  7. uni-app 轮播图视频+图片 视频图片全屏预览 两种方法

    项目场景: 在做商城项目的时候,商品详情的轮播图需要同时显示视频和图片,并且能够全局预览 解决方案: 如果项目里有uview这个组件库,可以通过swiper轮播图的指定类型进行解决,点击这里进行跳转 ...

  8. 实现浏览器全屏窗口的几种方法

    浏览网页,时常会发现自己的浏览器窗口不见了,但网页内容还在.这种效果是不是很神奇呢?实现此种功能只要有三种原理,按实现方法的不同,给它们各起了个名字,分别是:瞒天过海法.借尸还魂法和返璞归真法.不要被 ...

  9. Android中界面实现全屏显示的两种方式

    在开发android的应用当中,我们会遇到将一些界面设置为全屏显示的格式,有两种实现的方法.其一是在Java代码中实现,其二是在配置文件中实现. 1. 在Java代码中设置 super.onCreat ...

最新文章

  1. 计算机图形学画圆vc代码,计算机图形学实验--完整版-带结果--vc++实现.doc
  2. Run-Time Check Failure #0,The value of ESP was not properly saved 错误解决
  3. 青龙羊毛——悦读(搬运)
  4. 王者荣耀中有哪些获胜率高的玩法?
  5. 如何结合IbatisNet的LIST遍历实现模糊查询
  6. 定期定量采购_?采购计划员必备:各种物料采购计划与订单制定的技巧与方法...
  7. ZZULIOJ 1159: 最大的两个数(指针专题)
  8. HashMap深度解析
  9. 移动App 网络优化细节探讨
  10. 化学分子的溶解度预测模型(Rdkit构建)
  11. 特意整理出来一百套游戏源码,免费分享给大家
  12. 如何下载网页中的视频文件?
  13. 如何在ps添加箭头_Photoshop怎么画箭头 三种方法教你用PS做箭头
  14. python汇率兑换_汇率兑换—python第一课
  15. Control.DataBinding数据绑定细解
  16. 突然讨厌做前端,讨厌代码_如何安全清洁讨厌的游戏控制器
  17. TFN全新推出的全功能 手持式频谱分析仪 RMT系列 不仅可干扰定位 还可路测
  18. 阿里云建站教程——ECS服务器
  19. Echarts 饼图设置标签颜色(单个标签颜色、多个标签颜色)
  20. 火箭弹道设计 matlab,航天飞行动力学远程火箭弹道设计大作业 (1)

热门文章

  1. 腾讯音乐收购懒人听书:后者已实现盈利,阅文集团获10亿元现金
  2. vba调用mysql随机出题软件_题库需要随机进行出题
  3. XGBoost和时间序列
  4. 猜字母 把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
  5. noip 模拟赛 Po姐姐与他的妹子A
  6. java lru_LRU的理解与Java实现
  7. Elixir-List
  8. 2020.9.28--PS--色阶、色阶上色、曲线
  9. Indie Maker 一个人的创业
  10. 知乎高赞回答:为什么高级程序员不必担心自己的技术过时?