首要注意:生成一个PopupWindow最基本的三个条件是一定要设置的:View contentView,int width, int height ;少任意一个就不可能弹出来PopupWindow!!!!
package cgg.com.sss; import android.graphics.drawable.BitmapDrawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.ContextMenu; import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.LinearLayout; import android.widget.PopupMenu; import android.widget.PopupWindow; import android.widget.Toast; public class MainActivity extends AppCompatActivity { /** * popupWindow的显示方式 * 相对某个控件的位置(正左下方),无偏移 * showAsDropDown(View anchor): * 相对某个控件的位置,有偏移;xoff表示x轴的偏移,正值表示向左,负值表示向右;yoff表示相对y轴的偏移,正值是向下,负值是向上; * showAsDropDown(View anchor, int xoff, int yoff): * 相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移 * showAtLocation(View parent, int gravity, int x, int y): */ private PopupWindow popupWindow; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initPopupWindow(); } public void showPopupWindow(View view) { // 显示在某个控件的正下方,无偏移 popupWindow.showAsDropDown(view); } public void initPopupWindow() { View view1 = getLayoutInflater().inflate(R.layout.ppw, null); popupWindow = new PopupWindow(view1, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); // 点击PopupWindow之外是否消失PopupWindow popupWindow.setOutsideTouchable(true); // 设置背景 popupWindow.setBackgroundDrawable(new BitmapDrawable()); // 设置popupWindow点击时是否响应 popupWindow.setTouchable(true); } // 按键监听处理 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK://回退键 // 如果正在显示则关闭并且不退出当前activity if (popupWindow.isShowing()) { popupWindow.dismiss(); return false; } break; } return super.onKeyDown(keyCode, event); } }