原來,整個Android的窗口機制是基於一個叫做 WindowManager,這個接口可以添加view到屏幕,也可以從屏幕刪除view。它面向的對象一端是屏幕,另一端就是View,直接忽略我們以前的Activity或者Dialog之類的東東。其實我們的Activity或者Diolog底層的實現也是通過WindowManager,這個 WindowManager是全局的,整個系統就是這個唯一的東東。它是顯示View的最底層了。
寫一個簡單的代碼:
- WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
- Button view = new Button(this);
- view.setText("window manager test!");
- WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
- mWm.addView(view, mParams);
- //改變Dialog背景透明度
- Dialog dg = new Dialog(this);
- Window window = dg.getWindow();
- WindowManager.LayoutParams lp = window.getAttributes();
- lp.alpha = 0.5f;
- window.setAttributes(lp);
- //lp.alpha = 0.5f 透明度設置 其值要合理 自己反覆測試
- //爲什麼要這個技巧 因爲很多人說:彈出Dialog會導致背景變暗 有Animation發生 導致性能變慢 可以用這個改變之 而且可以藉助這個 使得全透明 不擋住Dialog後面內容的顯示
一般在剛開始開發android時,會犯一個錯誤,即在View的構造函數中獲取getWidth()和getHeight(),當一個view對象創建時,android並不知道其大小,所以getWidth()和getHeight()返回的結果是0,真正大小是在計算佈局時纔會計算,所以會發現一個有趣的事,即在onDraw( ) 卻能取得長寬的原因。
- width = activity.getWindowManager().getDefaultDisplay().getWidth();
- height = activity.getWindowManager().getDefaultDisplay().getHeight();