zoukankan      html  css  js  c++  java
  • Android在初始化时弹出popwindow的方法

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

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

    [java] view plaincopy
     
    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.   
    26. package cn.sd.sx.initpopw;  
    27.   
    28. import android.app.Activity;  
    29. import android.graphics.Color;  
    30. import android.os.Bundle;  
    31. import android.os.Handler;  
    32. import android.view.Gravity;  
    33. import android.view.View;  
    34. import android.view.ViewGroup.LayoutParams;  
    35. import android.widget.LinearLayout;  
    36. import android.widget.PopupWindow;  
    37. import android.widget.TextView;  
    38. import cn.sd.sx.popw.R;  
    39.   
    40. public class PopWActivity extends Activity {  
    41.       
    42.     private PopupWindow mPopupWindow;  
    43.     private Handler mHandler;  
    44.     // 检测时间间隔  
    45.     private int detchTime = 5;  
    46.       
    47.     @Override  
    48.     public void onCreate(Bundle savedInstanceState) {  
    49.         super.onCreate(savedInstanceState);  
    50.         setContentView(R.layout.main);  
    51.         mHandler = new Handler();  
    52.         // 显示popWindow  
    53.         showPopWindow();  
    54.     }  
    55.   
    56.     private void showPopWindow()  
    57.     {  
    58.         LinearLayout view = new LinearLayout(this);  
    59.         LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT,  
    60.                 LayoutParams.FILL_PARENT);  
    61.         TextView txt1 = new TextView(this);  
    62.         txt1.setLayoutParams(params);  
    63.         txt1.setGravity(Gravity.CENTER);  
    64.         txt1.setText("txt1");  
    65.         txt1.setBackgroundColor(Color.RED);  
    66.         view.addView(txt1);  
    67.         mPopupWindow = new PopupWindow(view, 300,300);  
    68.         mPopupWindow.setOutsideTouchable(true);  
    69.           
    70.         /*****************以下代码用来循环检测activity是否初始化完毕***************/  
    71.         Runnable showPopWindowRunnable = new Runnable() {  
    72.               
    73.             @Override  
    74.             public void run() {  
    75.                 // 得到activity中的根元素  
    76.                 View view = findViewById(R.id.main);  
    77.                 // 如何根元素的width和height大于0说明activity已经初始化完毕  
    78.                 if( view != null && view.getWidth() > 0 && view.getHeight() > 0) {  
    79.                     // 显示popwindow  
    80.                     mPopupWindow.showAtLocation(PopWActivity.this.findViewById(R.id.main),  
    81.                             Gravity.CENTER, 0, 0);  
    82.                     // 停止检测  
    83.                     mHandler.removeCallbacks(this);  
    84.                 } else {  
    85.                     // 如果activity没有初始化完毕则等待5毫秒再次检测  
    86.                     mHandler.postDelayed(this, detchTime);  
    87.                 }  
    88.             }  
    89.         };  
    90.         // 开始检测  
    91.         mHandler.post(showPopWindowRunnable);  
    92.       /******************以上代码用来循环检测activity是否初始化完毕*************/  
    93.     }  
    94. }  
  • 相关阅读:
    MySQL 8 新特性之Clone Plugin
    哈尔滨工业大学(威海)第九届ACM程序设计竞赛
    我回来了
    正则表达式(五):正则表达式的高阶使用
    正则表达式(四):正则表达式中的分组的概念
    正则表达式(三):正则表达式中的重复
    正则表达式(二):正则表达式的元字符
    正则表达式(一):正则表达式的概念
    Android NDK 跨平台构建工具 CMake 使用笔记
    字节序问题之大小端模式讲解
  • 原文地址:https://www.cnblogs.com/bigben0123/p/4167689.html
Copyright © 2011-2022 走看看