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

留个人备用0.0

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 r = new Runnable() {

@Override
public void run() {
if(null != activity.getWindow().getDecorView().getWindowToken()) {
showPopwindow();
mHandler.removeCallbacks(this);
}else {
mHandler.postDelayed(this, 5);
}
}
};
mHandler.post(r);开始检测
/******************以上代码用来循环检测activity是否初始化完毕*************/
}
}

更多相关文章

  1. android开发环境搭建最新方法
  2. Android自定义属性 及 TypedArray的使用方法
  3. android程序退出当前activity的方法
  4. 实现TextView的垂直滚动以及通过代码设置TextView滚动无法显示滚
  5. 获取Android的key的MD5和SHA1的方法
  6. Android Studio使用XML样式在JAVA代码中的使用(使用java代码调节x
  7. Android中杀进程的几种方法 (1) - killBackgroundProcesses
  8. Android客户端和服务器端数据交互的第四种方法
  9. Android实现代码画虚线边框背景效果

随机推荐

  1. android studio单元测试
  2. Android(安卓)EditText得到焦点失去焦点
  3. Android导致内存泄露的几种情况和解决方
  4. 2011.06.08——— android 1.6 launcher
  5. android 解析json数据格式
  6. 坑:Android(安卓)Studio gradle minifyEna
  7. android 自定义全局未处理异常捕获器
  8. android 浮动按钮
  9. android 代码混淆(jar包混淆)
  10. Android单元测试 笔记