现在的位置: 首页 > 综合 > 正文

简单的PopupWindow小例子

2013年09月01日 ⁄ 综合 ⁄ 共 2202字 ⁄ 字号 评论关闭

PopupWindow是对话框的一种,比AlertDialog更灵活。

AlertDialog是非阻塞的。

PopupWindow是阻塞的。

/**
 *
 */
package cn.popup;

import android.app.Activity;
import android.app.AlertDialog;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;


public class TestAct extends Activity {

    private static final String TAG = TestAct.class.getName();
    private int seconds = 0;
    TextView parentMessage = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);
        ViewGroup.LayoutParams ww = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);

        parentMessage = new TextView(this);
        parentMessage.setLayoutParams(ww);
        parentMessage.setText("简单的PopupWindow");
        layout.addView(parentMessage);


        AlertDialog dialog = new AlertDialog.Builder(this).create();
        dialog.setMessage("AlertDialog非阻塞的对话框");
        dialog.show();

//todo: 直接调用PopupWindow对话框,死机,说明PopupWindow阻塞UI线程 和AlertDialog不同
//        new Handler().post(new Runnable() {
//            @Override
//            public void run() {
//                //To change body of implemented methods use File | Settings | File Templates.
//                showPopupWindow(TestAct.this);
//            }
//        });


//todo:延后100毫秒,正常跳出PopupWindow对话框
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                //To change body of implemented methods use File | Settings | File Templates.
                showPopupWindow(TestAct.this);
            }
        }, 100);
    }

    private void showPopupWindow(Activity act) {
        ViewGroup.LayoutParams ww = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        LinearLayout layout = new LinearLayout(act);
        layout.setBackgroundColor(Color.BLUE);
        EditText input = new EditText(act);
        input.setLayoutParams(ww);
        input.setText("跳出PopupWindow,我创建的时候会阻塞UI线程");
        layout.addView(input);

        final PopupWindow pw = new PopupWindow(layout, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true);
        pw.setOutsideTouchable(false);
        pw.update();

        View v = act.getWindow().getDecorView();//decorView是window中的最顶层view
        pw.showAtLocation(v, Gravity.CENTER, 0, 0);
    }
}

抱歉!评论已关闭.