使用設置自定義對話框的大小,位置,樣式以及設置在安卓桌面上彈出對話框

第一步:建立對話框
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);

相關文章
相關標籤/搜索