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. 如何使用串口来给STM32下载程序

    前言 第一次学习STM32的时候,不知道有调试器这个东西,所以一直是通过串口来给STM32下载程序,下载速度也还算可以,一般是几秒钟完成.后来用了调试器,可以直接在Keil环境下进行下载,而且还可以进 ...

  2. Hogp连接流程分析

    当BLE设备已经完成配对,并且完成GATT服务的搜索,下一步就开始profile 的连接流程了,一般LE设备都是走的HOGP的流程,我们这篇文章就分析一下hogp的连接流程. 连接是从framewor ...

  3. Ionic 中控件点击延迟的处理

    原文发表于我的技术博客 本文分享了在 Ionic 中如何处理控件点击延迟的问题. 原文发表于我的技术博客 1. 问题描述 在 Ionic 中,当在 iOS 环境下运行元素的点击事件时,你会发现点击响应 ...

  4. for...else 小记

    for ......: ...... else: ...... 在 for 循环中,若没有执行 break ,正常结束,则会执行 else 中的语句. 若执行了 break , 则 不会 执行 els ...

  5. linux第二次读书笔记

    <Linux内核设计与实现>读书笔记 第五章 系统调用   第五章系统调用 系统调用是用户进程与内核进行交互的接口.为了保护系统稳定可靠,避免应用程序恣意忘形. 5.1与内核通信 系统调用 ...

  6. Linux内核分析——程序破解

    1. 掌握NOP.JNE.JE.JMP.CMP汇编指令的机器码 NOP:NOP指令即“空指令”.执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令.(机器码: ...

  7. eclipse中git的author和commiter的修改

    项目目录,隐藏的文件.git的文件夹,config文件 eclipse-->右击项目--showin--system explorer.git 打开config文件加上 [user] name ...

  8. python 使用read_csv读取 CSV 文件时报错

    读取csv文件时报错 df = pd.read_csv('c:/Users/NUC/Desktop/成绩.csv' ) Traceback (most recent call last):  File ...

  9. JProfiler的使用

    1.下载地址:http://www.ej-technologies.com/download/jprofiler/files 2.使用过程 1.点击此图的new Session 2.点击左边appli ...

  10. Fastdfs文件服务器搭建

    安装FastDFS之前,先安装libevent工具包.然后要安装libfastcommon和FastDFS,还要依赖nginx来显示图片. 1安装libevent yum -y install lib ...