private Dialog initCommonDialog(View view) { Dialog dialog = new Dialog(MainActivity.this, R.style.Theme_Light_Dialog); //获得dialog的window窗口 Window window = dialog.getWindow(); //设置dialog在屏幕底部 window.setGravity(Gravity.BOTTOM); //设置dialog弹出时的动画效果,从屏幕底部向上弹出 window.setWindowAnimations(R.style.dialogStyle); window.getDecorView().setPadding(0, 0, 0, 0); //获得window窗口的属性 android.view.WindowManager.LayoutParams lp = window.getAttributes(); //设置窗口宽度为充满全屏 lp.width = WindowManager.LayoutParams.MATCH_PARENT; lp.dimAmount = 0.0f; //设置窗口高度为包裹内容 //lp.height = WindowManager.LayoutParams.; //将设置好的属性set回去 window.setAttributes(lp); //将自定义布局加载到dialog上 dialog.setContentView(view); dialog.setCanceledOnTouchOutside(true); return dialog; }
对话框样式:
<!-- 对话框样式 --> <style name="Theme.Light.Dialog" parent="android:style/Theme.Dialog"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:scrollHorizontally">true</item> </style>
动画效果:
<!-- 弹出框动画 由下至上 --> <style name="dialogStyle" parent="@android:style/Animation.Dialog"> <item name="@android:windowEnterAnimation">@anim/notice_edit_select_bottom_enter</item> <!-- 进入时的动画 --> <item name="@android:windowExitAnimation">@anim/notice_edit_select_bottom_exit</item> <!-- 退出时的动画 --> </style>
进入动画:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="100%" android:duration="600"></translate> </set>
退出动画:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:toYDelta="100%" android:duration="600"></translate> </set>
动画用的是平移动画,
看一下Dialog源码,内置了Window对象