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

简单的PopupWindow小例子

2013-05-31 20:04 218 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: