http://blog.csdn.net/sxsboat/article/details/7340759

Android中在onCreate()时弹出popwindow,很多人都有过类似的需求吧,但是直接在onCreate()中调用popwindow的showAtLocation()方法是会报异常的,原因是此时activity还没有初始化完毕,网上也有一些解决方法,但一般都是通过延时一小段时间再弹出实现的,代码不够健壮。其实可以通过不断的检测当前activity的状态,一旦初始化完毕立即调用popwindow的showAtLocation()方法显示。详细代码如下:

  1. /************************************************************************
  2. *
  3. * 该类用来在初始化的时候弹出一个popwindow,用到的而已文件如下,特别要注意的是其中的
  4. * android:minHeight="1dp" 和android:minWidth="1dp"属性。初始化时弹出popwindow的关键是
  5. * 要等待整个activity初始化完毕后再调用showAtLocation()方法,否则会出异常。
  6. * 实现方式就是不停的检测acitvity是否初始化完毕,一旦完毕就调用
  7. * showAtLocation() 方法显示popwindow。
  8. *
  9. * 以下为布局文件:
  10. *  <?xml version="1.0" encoding="utf-8"?>
  11. *  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  12. *      android:id="@+id/main"
  13. *      android:layout_width="fill_parent"
  14. *      android:layout_height="fill_parent"
  15. *      android:minHeight="1dp"
  16. *      android:minWidth="1dp"
  17. *      android:orientation="vertical" >
  18. *  </LinearLayout>
  19. *
  20. * 作者:石兴
  21. * 完成时间:2012/3/10
  22. * 版本 :1.0
  23. *
  24. ************************************************************************/
  25. package cn.sd.sx.initpopw;
  26. import android.app.Activity;
  27. import android.graphics.Color;
  28. import android.os.Bundle;
  29. import android.os.Handler;
  30. import android.view.Gravity;
  31. import android.view.View;
  32. import android.view.ViewGroup.LayoutParams;
  33. import android.widget.LinearLayout;
  34. import android.widget.PopupWindow;
  35. import android.widget.TextView;
  36. import cn.sd.sx.popw.R;
  37. public class PopWActivity extends Activity {
  38. private PopupWindow mPopupWindow;
  39. private Handler mHandler;
  40. // 检测时间间隔
  41. private int detchTime = 5;
  42. @Override
  43. public void onCreate(Bundle savedInstanceState) {
  44. super.onCreate(savedInstanceState);
  45. setContentView(R.layout.main);
  46. mHandler = new Handler();
  47. // 显示popWindow
  48. showPopWindow();
  49. }
  50. private void showPopWindow()
  51. {
  52. LinearLayout view = new LinearLayout(this);
  53. LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,
  54. LayoutParams.FILL_PARENT);
  55. TextView txt1 = new TextView(this);
  56. txt1.setLayoutParams(params);
  57. txt1.setGravity(Gravity.CENTER);
  58. txt1.setText("txt1");
  59. txt1.setBackgroundColor(Color.RED);
  60. view.addView(txt1);
  61. mPopupWindow = new PopupWindow(view, 300,300);
  62. mPopupWindow.setOutsideTouchable(true);
  63. /*****************以下代码用来循环检测activity是否初始化完毕***************/
  64. Runnable showPopWindowRunnable = new Runnable() {
  65. @Override
  66. public void run() {
  67. // 得到activity中的根元素
  68. View view = findViewById(R.id.main);
  69. // 如何根元素的width和height大于0说明activity已经初始化完毕
  70. if( view != null && view.getWidth() > 0 && view.getHeight() > 0) {
  71. // 显示popwindow
  72. mPopupWindow.showAtLocation(PopWActivity.this.findViewById(R.id.main),
  73. Gravity.CENTER, 0, 0);
  74. // 停止检测
  75. mHandler.removeCallbacks(this);
  76. } else {
  77. // 如果activity没有初始化完毕则等待5毫秒再次检测
  78. mHandler.postDelayed(this, detchTime);
  79. }
  80. }
  81. };
  82. // 开始检测
  83. mHandler.post(showPopWindowRunnable);
  84. /******************以上代码用来循环检测activity是否初始化完毕*************/
  85. }
  86. }

Android在初始化时弹出popwindow的方法的更多相关文章

  1. [转]Android在初始化时弹出popwindow的方法 .

    转自:http://blog.csdn.net/sxsboat/article/details/7340759 留个人备用0.0 Android中在onCreate()时弹出popwindow,很多人 ...

  2. Android定位&地图&导航——基于百度地图,实现自定义图标绘制并点击时弹出泡泡

    一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...

  3. Android 如何解决dialog弹出时无法捕捉Activity的back事件

    Android 如何解决dialog弹出时无法捕捉Activity的back事件 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到b ...

  4. Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法

    Visual Studio2012打开时弹出"遇到异常:这可能是由某个扩展导致的"错误的解决办法: 具体问题如下: 分析原因:网上搜集了以下,出现异常的原因是安装了第三方控件,然后 ...

  5. loadrunner录制时弹出invalid application path!please check if application exists对话框

    问题:oadrunner录制时弹出invalid application path!please check if application exists对话框 原因:IE浏览器地址不对,需要手动重新选 ...

  6. 解决在IE里预览时弹出:为了有利于保护安全性......

    用Dreamweaver做网页,在IE里预览时弹出这个:为了有利于保护安全性,Internet Explorer 已限制此网页运行可以访问计算机的脚本或ActiveX控件. 在页面顶部加段代码就可以了 ...

  7. VS2015+OpenGL4.0开发编译时弹出错误:glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符号在函数 _GetRegistrySysColors@8 中被引用

    一.问题描述: VS2015+OpenGL4.0开发编译时弹出如下所示的错误: 1>glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符 ...

  8. eclipse启动时弹出Failed to create the Java Virtual Machine

    eclipse启动时弹出Failed to create the Java Virtual Machine 一.现象 今天装eclipse的时候出现Failed to create the Java ...

  9. VS2012与VS2015同时安装用VS2012创建MFC程序时弹出编译错误”fatal error C1083: 无法打开包括文件:“mprapidef.h”: No such file or directory”的解决办法

    在WIndows 7操作系统上同时安装VS2012与VS2015并用VS2012创建MFC程序时弹出编译错误”fatal error C1083: 无法打开包括文件:“mprapidef.h”: No ...

随机推荐

  1. html5录音支持pc和Android、ios部分浏览器,微信也是支持的,JavaScript getUserMedia

    以前在前人基础上重复造了一个网页录音的轮子,顺带把github仓库使用研究了一下,扔到了github上. 优势在于结构简单,可插拔式的录音格式支持,几乎可以支持任意格式(前提有相应的编码器):默认提供 ...

  2. slurm用户快速入门手册

    1. 概述2. 架构3. 命令3.1 sacct3.2 sattach3.4 sbatch3.5 sbcast3.6 scancel3.7 scontrol3.8 sinfo3.9 smap3.10 ...

  3. java使用何种类型表示精确的小数?

    问题 java使用何种类型表示精确的小数? 结论 float和double类型的主要设计目标是为了科学计算和工程计算,速度快,存在精度丢失 BigDecimal用来表示任意精确浮点数运算的类,在商业应 ...

  4. Name方法

    重命名磁盘文件.目录或文件夹. 语法 Name 旧路径名称 As 新路径名称 “Name”**** 语句语法包含以下部分: 部分 说明 旧路径名称 必需. 字符串表达式,指定现有的文件名和位置;可能包 ...

  5. 阿里云Https通配符证书购买

    先付款,再绑定证书. 会款后会审核,等待... DNS解析配置错误 按域名授权配置,增加一条 DNS Txt记录值.

  6. CentOS 6.7下 Samba服务器的搭建与配置(share共享模式)

    https://www.linuxidc.com/Linux/2016-12/138220.htm

  7. 【2016.3.22】作业 Word count 小程序

    今天更下word count程序的设计思路及实现方法. 我的程序贴在coding里,这里就先不贴出来了, 我的coding地址:https://coding.net/u/holy_angel/p/wo ...

  8. VS2015 导航栏 查看每个cpp文件中类以及类成员函数的框框

    这个可以查看每个cpp文件中类以及类成员函数的框框叫导航栏! 怎么打开导航栏可以再百度.

  9. 『编程题全队』Beta 阶段用户使用调查报告

    目录 一.项目概述 1.1项目名称 1.2项目简介 1.3项目预期达到目标 1.4项目测试方法 二.项目测试过程 2.1测试对象 2.2测试时长 2.3用户测试反馈 一.项目概述 1.1项目名称 本次 ...

  10. PAT L2-021 点赞狂魔

    https://pintia.cn/problem-sets/994805046380707840/problems/994805058485469184 微博上有个“点赞”功能,你可以为你喜欢的博文 ...