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); }}