您的位置:首页 > 运维架构

安卓popwindow进入页面自动开启问题

2016-07-19 10:47 399 查看
Android中在onCreate()时弹出popwindo,但是直接在onCreate()中调用popwindow的showAtLocation()方法是会报异常的,原因是此时activity还没有初始化完毕。其实可以通过不断的检测当前activity的状态,一旦初始化完毕立即调用popwindow的showAtLocation()方法显示。详细代码如下:

[java] view
plain copy

/************************************************************************ 

 * 

 * 该类用来在初始化的时候弹出一个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> 

 * 

 ************************************************************************/  

  

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是否初始化完毕*************/  

    }  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: