1. 程式人生 > >Android 關於dialog的顯示位置設定

Android 關於dialog的顯示位置設定

自定義dialog 預設的顯示位置是window 的位置
我們可以通過dialog或者視窗物件 window 然後通過window 去設定dialog的上下中的位置
例如 dialog.getWindow(); 得到window物件
window.setGravity(Gravity.CENTER); 中間位置
window.setGravity(Gravity.BOTTEM); 底部位置
window.setGravity(Gravity.TOP); 頂部位置
等等 上下左右你都可以去設定

現在我們設定了dialog在wendow 中的位置 然而這樣並不能滿足我們的需求 我想dialog 顯示在距離頂部有一段距離的地方顯示 例如距離頂部100 的位置該怎麼辦呢

有辦法 仍然是通過window去設定
WindowManager.LayoutParams params = window.getAttributes(); 獲取window 的params 然後給params去設定x y 引數即可 我們設定的 x y 是相對值 相對自身位置的偏移量 負值無效(顯而易見 x 是代表水平方向的偏移 y 代表豎直方向的偏移)
簡單舉個栗子

   * 當引數值包含Gravity.LEFT時,對話框出現在左邊,所以params.x就表示相對左邊的偏移
     * 當引數值包含Gravity.RIGHT時,對話框出現在右邊,所以params.x就表示相對右邊的偏移
     * 當引數值包含Gravity.TOP時,對話框出現在上邊,所以params.y就表示相對上邊的偏移
     * 當引數值包含Gravity.BOTTOM時,對話框出現在下邊,所以params.y就表示相對下邊的偏移
注意 負值無效

還是剛才那個需求 我有一個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);

這個就可以了

還有一種方式就是按照螢幕比例設定
// WindowManager m = getWindowManager();
// Display d = m.getDefaultDisplay(); // 獲取螢幕寬、高
// WindowManager.LayoutParams params = dialogWindow.getAttributes();
// params.height = (int) (d.getHeight() * 0.5); // 高度設定為螢幕的0.5
// params.width = (int) (d.getWidth() * 0.6); // 寬度設定為螢幕的0.6
// dialogWindow.setAttributes(params);
這樣你就可以自由設定的dialog的位置了