Dialog是非阻塞式对话框:Dialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。下面是使用Dialog和PopupWindow实现底部弹出
代码如下
public class MainActivity extends AppCompatActivity { private Button mbtn_dia; private Button mbtn_pop; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mbtn_dia = (Button) findViewById(R.id.btn_dia); mbtn_pop = (Button) findViewById(R.id.btn_pop); mbtn_dia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showDialog(MainActivity.this,R.layout.dialog); } }); mbtn_pop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showPopupWindow(MainActivity.this,R.layout.popupwindow); } }); } private void showDialog(Context context, @LayoutRes int resource) { //设置要显示的view View view = View.inflate(context, resource, null); //此处可按需求为各控件设置属性 view.findViewById(R.id.dia1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); Dialog dialog = new Dialog(context, R.style.dialog); dialog.setContentView(view); Window window = dialog.getWindow(); //设置弹出窗口大小 window.setLayout(WindowManager.LayoutParams.FILL_PARENT, WindowManager.LayoutParams.WRAP_CONTENT); //设置显示位置 window.setGravity(Gravity.BOTTOM); //设置动画效果 window.setWindowAnimations(R.style.AnimBottom); dialog.show(); } private void showPopupWindow(final Context context, @LayoutRes int resource) { //设置要显示的view View view = View.inflate(context, resource, null); //此处可按需求为各控件设置属性 view.findViewById(R.id.pop1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } }); PopupWindow popupWindow = new PopupWindow(view); //设置弹出窗口大小 popupWindow.setWidth(WindowManager.LayoutParams.FILL_PARENT); popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT); //必须设置以下两项,否则弹出窗口无法取消 popupWindow.setFocusable(true); popupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000)); //设置动画效果 popupWindow.setAnimationStyle(R.style.AnimBottom); //设置显示位置,findViewById获取的是包含当前整个页面的view popupWindow.showAtLocation(view, Gravity.BOTTOM, 0, 0); } }
demo地址:
https://download.youkuaiyun.com/download/u012404272/10529411