第一步:建立對話框
android
MyDialog mydlg=new MyDialog(context);ide
第二步:獲取對話框的window實例,經過window實例來控制對話框出現的位置,大小和彈出時候的場景函數
Window dlgwindow=mydlg.getWindow();
動畫
設置對話框最終顯示位置spa
dlgWindow.setGravity(Gravity.TOP);繼承
參數能夠是Gravity.TOP(頂部),Gravity.BUTTON(底部),Gravity.LEFT(左邊),Gravity.RIGHT(右邊),Gravity.CENTER(居中)以及它們的組合get
設置對話框大小it
經過獲取屏幕的大小,按照比例的方法設置比較便捷些io
首先得到WindowManager實例select
WindowManager m = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display d = m.getDefaultDisplay(); // 獲取屏幕寬、高用
WindowManager.LayoutParams p = dlgWindow.getAttributes(); // 獲取對話框當前的參數值
p.height = (int) (d.getHeight() * 0.5); // 高度設置爲屏幕的0.5
p.width = (int) (d.getWidth() * 1); // 寬度設置爲整個屏幕寬度
p.alpha = 0.5f; //設置對話框的透明度
dlgWindow.setAttributes(p);//
設置對話框在桌面上彈出
mydlg.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);//這裏設置的能夠在桌面中顯示對話框
實現這一步還須要獲取權限
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
設置window的樣式;
經過style文件來設置對話框的樣式
如下是一些經常使用的標籤
<item name="android:windowFullscreen">true</item> <!--填充屏幕-->
<item name="android:windowFrame">@null</item> :Dialog的windowFrame框爲無
<item name="android:windowIsFloating">true</item>:是否浮如今activity之上
<item name="android:windowIsTranslucent">false</item>:是否半透明
<item name="android:windowNoTitle">true</item>:是否顯示title
<item name="android:windowBackground">@drawable/dia_bg</item>:設置dialog的背景
<item name="android:windowBackground">@drawable/selector_dialog_bg</item><!--對話框背景透明-->
<item name="android:backgroundDimEnabled">false</item>: 背景是否模糊顯示
<item name="android:windowAnimationStyle">@style/xxx_ani</item>:設置對話框彈出和消失的動畫
其它:
//設置點擊對話框外部,能夠關閉對話框
mydlg.setCanceledOnTouchOutside(true);
//動態設置動畫
mydlg.getWindow().setWindowAnimations(R.style.dialog_ani);
PS:對於setType爲WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
即系統窗口,是不支持經過getWindow()直接設置動畫的,不過,天無絕人之路,能夠在對話框裏面的view設置動畫
eg:
Animation ani=AnimationUtils.loadAnimation(getContext(), R.anim.xxx_anim);
view.setAnimation(ani);
//如何給對話框設置樣式
若是是經過繼承Dialog來自定義對話框,經過構造函數設置
eg:super(context,R.style.myDialog);