自定義dialog 默認(rèn)的顯示位置是window 的位置?
我們可以通過dialog或者窗口對象 window 然后通過window 去設(shè)置dialog的上下中的位置?
例如 dialog.getWindow(); 得到window對象?
window.setGravity(Gravity.CENTER); 中間位置?
window.setGravity(Gravity.BOTTEM); 底部位置?
window.setGravity(Gravity.TOP); 頂部位置?
等等 上下左右你都可以去設(shè)置
現(xiàn)在我們設(shè)定了dialog在wendow 中的位置 然而這樣并不能滿足我們的需求 我想dialog 顯示在距離頂部有一段距離的地方顯示 例如距離頂部100 的位置該怎么辦呢
有辦法 仍然是通過window去設(shè)置?
WindowManager.LayoutParams params = window.getAttributes(); 獲取window 的params 然后給params去設(shè)置x y 參數(shù)即可 我們設(shè)置的 x y 是相對值 相對自身位置的偏移量 負(fù)值無效(顯而易見 x 是代表水平方向的偏移 y 代表豎直方向的偏移)?
簡單舉個栗子
? * 當(dāng)參數(shù)值包含Gravity.LEFT時,對話框出現(xiàn)在左邊,所以params.x就表示相對左邊的偏移
? ? * 當(dāng)參數(shù)值包含Gravity.RIGHT時,對話框出現(xiàn)在右邊,所以params.x就表示相對右邊的偏移
? ? * 當(dāng)參數(shù)值包含Gravity.TOP時,對話框出現(xiàn)在上邊,所以params.y就表示相對上邊的偏移
? ? * 當(dāng)參數(shù)值包含Gravity.BOTTOM時,對話框出現(xiàn)在下邊,所以params.y就表示相對下邊的偏移
注意 負(fù)值無效
還是剛才那個需求 我有一個dialog 想讓它顯示在距離頂部100 的位置
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());?
View view = LayoutInflater.from(getActivity()).inflate(R.layout.home_identity_choose_window,?
null);?
builder.setView(view);?
titleDialog = builder.create();?
Window window = titleDialog.getWindow();?
WindowManager.LayoutParams params = window.getAttributes();?
params.x = 10;?
params.y = 100;?
params.width = 220;?
params.height = 200;?
window.setAttributes(params);?
titleDialog.show();?
window.setGravity(Gravity.TOP);
這個就可以了
還有一種方式就是按照屏幕比例設(shè)置?
// WindowManager m = getWindowManager();?
// Display d = m.getDefaultDisplay(); // 獲取屏幕寬、高?
// WindowManager.LayoutParams params = dialogWindow.getAttributes();?
// params.height = (int) (d.getHeight() * 0.5); // 高度設(shè)置為屏幕的0.5?
// params.width = (int) (d.getWidth() * 0.6); // 寬度設(shè)置為屏幕的0.6?
// dialogWindow.setAttributes(params);?
這樣你就可以自由設(shè)置dialog的位置了
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。?