Android在初始化时弹出popwindow的方法
Android中在onCreate()时弹出popwindow,很多人都有过类似的需求吧,但是直接在onCreate()中调用popwindow的showAtLocation()方法是会报异常的,原因是此时activity还没有初始化完毕,网上也有一些解决方法,但一般都是通过延时一小段时间再弹出实现的,代码不够健壮。其实可以通过不断的检测当前activity的状态,一旦初始化完毕立即调用popwindow的showAtLocation()方法显示。详细代码如下:
- /************************************************************************
- *
- * 该类用来在初始化的时候弹出一个popwindow,用到的而已文件如下,特别要注意的是其中的
- * android:minHeight="1dp" 和android:minWidth="1dp"属性。初始化时弹出popwindow的关键是
- * 要等待整个activity初始化完毕后再调用showAtLocation()方法,否则会出异常。
- * 实现方式就是不停的检测acitvity是否初始化完毕,一旦完毕就调用
- * showAtLocation() 方法显示popwindow。
- *
- * 以下为布局文件:
- * <?xml version="1.0" encoding="utf-8"?>
- * <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- * android:id="@+id/main"
- * android:layout_width="fill_parent"
- * android:layout_height="fill_parent"
- * android:minHeight="1dp"
- * android:minWidth="1dp"
- * android:orientation="vertical" >
- * </LinearLayout>
- *
- * 作者:石兴
- * 完成时间:2012/3/10
- * 版本 :1.0
- *
- ************************************************************************/
- package cn.sd.sx.initpopw;
- import android.app.Activity;
- import android.graphics.Color;
- import android.os.Bundle;
- import android.os.Handler;
- import android.view.Gravity;
- import android.view.View;
- import android.view.ViewGroup.LayoutParams;
- import android.widget.LinearLayout;
- import android.widget.PopupWindow;
- import android.widget.TextView;
- import cn.sd.sx.popw.R;
- public class PopWActivity extends Activity {
- private PopupWindow mPopupWindow;
- private Handler mHandler;
- // 检测时间间隔
- private int detchTime = 5;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- mHandler = new Handler();
- // 显示popWindow
- showPopWindow();
- }
- private void showPopWindow()
- {
- LinearLayout view = new LinearLayout(this);
- LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,
- LayoutParams.FILL_PARENT);
- TextView txt1 = new TextView(this);
- txt1.setLayoutParams(params);
- txt1.setGravity(Gravity.CENTER);
- txt1.setText("txt1");
- txt1.setBackgroundColor(Color.RED);
- view.addView(txt1);
- mPopupWindow = new PopupWindow(view, 300,300);
- mPopupWindow.setOutsideTouchable(true);
- /*****************以下代码用来循环检测activity是否初始化完毕***************/
- Runnable showPopWindowRunnable = new Runnable() {
- @Override
- public void run() {
- // 得到activity中的根元素
- View view = findViewById(R.id.main);
- // 如何根元素的width和height大于0说明activity已经初始化完毕
- if( view != null && view.getWidth() > 0 && view.getHeight() > 0) {
- // 显示popwindow
- mPopupWindow.showAtLocation(PopWActivity.this.findViewById(R.id.main),
- Gravity.CENTER, 0, 0);
- // 停止检测
- mHandler.removeCallbacks(this);
- } else {
- // 如果activity没有初始化完毕则等待5毫秒再次检测
- mHandler.postDelayed(this, detchTime);
- }
- }
- };
- // 开始检测
- mHandler.post(showPopWindowRunnable);
- /******************以上代码用来循环检测activity是否初始化完毕*************/
- }
- }
Android在初始化时弹出popwindow的方法的更多相关文章
- [转]Android在初始化时弹出popwindow的方法 .
转自:http://blog.csdn.net/sxsboat/article/details/7340759 留个人备用0.0 Android中在onCreate()时弹出popwindow,很多人 ...
- Android定位&地图&导航——基于百度地图,实现自定义图标绘制并点击时弹出泡泡
一.问题描述 上一次我们使用百度地图实现基本的定位功能,接下来我们继续实现搜索和定位,并使用LocationOverlay绘制定位位置,同时展示如何使用自定义图标绘制并点击时弹出泡泡 如图所示: 二. ...
- Android 如何解决dialog弹出时无法捕捉Activity的back事件
Android 如何解决dialog弹出时无法捕捉Activity的back事件 在一些情况下,我们需要捕捉back键事件,然后在捕捉到的事件里写入我们需要进行的处理,通常可以采用下面三种办法捕捉到b ...
- Visual Studio2012打开时弹出“遇到异常:这可能是由某个扩展导致的”错误的解决办法
Visual Studio2012打开时弹出"遇到异常:这可能是由某个扩展导致的"错误的解决办法: 具体问题如下: 分析原因:网上搜集了以下,出现异常的原因是安装了第三方控件,然后 ...
- loadrunner录制时弹出invalid application path!please check if application exists对话框
问题:oadrunner录制时弹出invalid application path!please check if application exists对话框 原因:IE浏览器地址不对,需要手动重新选 ...
- 解决在IE里预览时弹出:为了有利于保护安全性......
用Dreamweaver做网页,在IE里预览时弹出这个:为了有利于保护安全性,Internet Explorer 已限制此网页运行可以访问计算机的脚本或ActiveX控件. 在页面顶部加段代码就可以了 ...
- VS2015+OpenGL4.0开发编译时弹出错误:glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符号在函数 _GetRegistrySysColors@8 中被引用
一.问题描述: VS2015+OpenGL4.0开发编译时弹出如下所示的错误: 1>glaux.lib(tk.obj) : error LNK2019: 无法解析的外部符号 _sscanf,该符 ...
- eclipse启动时弹出Failed to create the Java Virtual Machine
eclipse启动时弹出Failed to create the Java Virtual Machine 一.现象 今天装eclipse的时候出现Failed to create the Java ...
- 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 ...
随机推荐
- vue 路由拦截、axios请求拦截
路由拦截 项目中,有些页面需要登录后才能进入,例如,在某页面A,用户在操作前需要先进入登录页(此时需要将上一页的地址(/survey/start)作为query存入login页面的地址中,如: htt ...
- nodejs-日志组件log4js的使用方法
log4js是在nodejs一个非常好用的日志组件,但是今天在使用的时候从网上查看的代码并不能运行(http://www.cnblogs.com/atp-sir/p/7070050.html),于是查 ...
- C_数据结构_递归实现求阶乘
# include <stdio.h> int main(void) { int val; printf("请输入一个数字:"); printf("val = ...
- linux-shell-引用-命令替换-命令退出状态-逻辑操作符
命令替换:bash7步扩展的之一 嵌套 这里没什么意义 退出状态可以参与逻辑判断 表达式 算数表达式和条件表达式,逻辑表达式 查看passwd命令比,避免用户捕获输入密码的接口 这种方式就可以直接输 ...
- 变量 var &函数new
声明变量 变量:变量是存储信息的容器,创建变量通常称为"声明"变量 变量必须以字母开头(小驼峰式myName): 变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做): 变量名 ...
- 伪GZCC官网
<html class="no-js"><head> <meta charset="utf-8"> <meta htt ...
- vue 项目引入字体报错
vue 项目引入特殊字体,总是提示有问题 原因是,在webpack 里面的配置有问题 在项目文件里面引入字体的时候,应该写url-loader 而不能是url
- Maven+SSM整合.doc
Maven + SSM整合 1开发环境搭建 1.1Eclipse4.7(Oxygen) + Tomcat8 + Maven3.5.2 2Maven Web项目创建 2.1新建maven项目 2.2 选 ...
- Delphi的idhttp报IOHandler value is not valid错误的原因[转]
出现这种问题的原因是由于访问的 URL地址为https或存在其跳转地址为https. 首先单纯使用idhttp是只能访问http,而https则需要搭配IdSSLIOHandlerSocketOpen ...
- phpstorm 注释模板
/** * Created by ${PRODUCT_NAME}. * User: ${USER} * Date: ${DATE} * Time: ${TIME} */