標籤:
WindowManager 中LayoutParams的各種屬性
WindowManager.LayoutParams 是 WindowManager 介面的嵌套類(內部類);它繼承於 ViewGroup.LayoutParams; 它用於向WindowManager描述Window的管理原則。
1.
public int x;
如果忽略gravity屬性,那麼它表示視窗的絕對X位置。 什麼是gravity屬性呢?簡單地說,就是視窗如何停靠。 當設定了 Gravity.LEFT 或 Gravity.RIGHT 之後,x值就表示到特定邊的距離。2.
public int y;
如果忽略gravity屬性,那麼它表示視窗的絕對Y位置。 當設定了 Gravity.TOP 或 Gravity.BOTTOM 之後,y值就表示到特定邊的距離。
3.
public float horizontalWeight; public float verticalWeight;
在縱/橫向上,為關聯的view預留了多少擴充空間(像素)。如果是0,那麼此view不能被展開。
其他情況下,擴充空間(像素)將被widget所均分。
4.
public int type;
視窗類別型。有3種主要類型:
Applicationwindows:
取值在 FIRST_APPLICATION_WINDOW 和 LAST_APPLICATION_WINDOW 之間。是通常的、頂層的應用程式視窗。必須將 token 設定成 activity 的 token 。
Sub_windows:
取值在 FIRST_SUB_WINDOW 和 LAST_SUB_WINDOW 之間。 與頂層視窗相關聯,token 必須設定為它所附著的宿主視窗的 token。
Systemwindows:
取值在 FIRST_SYSTEM_WINDOW 和 LAST_SYSTEM_WINDOW 之間。用於特定的系統功能。它不能用於應用程式,使用時需要特殊許可權。
下面定義了 type 的取值:
應用程式視窗。
public static final int FIRST_APPLICATION_WINDOW = 1;
所有程式視窗的“基地”視窗,其他應用程式視窗都顯示在它上面。
public static final int TYPE_BASE_APPLICATION =1;
普通應喲功能程式視窗。token必須設定為Activity的token,以指出該視窗屬誰。
public static final int TYPE_APPLICATION = 2;
用於應用程式啟動時所顯示的視窗。應用本身不要使用這種類型。
它用於讓系統顯示些資訊,直到應用程式可以開啟自己的視窗。
public static final int TYPE_APPLICATION_STARTING = 3;
應用程式視窗結束。
public static final int LAST_APPLICATION_WINDOW = 99;
子視窗。子視窗的Z序和座標空間都依賴於他們的宿主視窗。
public static final int FIRST_SUB_WINDOW = 1000;
面板視窗,顯示於宿主視窗上層。
public static final int TYPE_APPLICATION_PANEL = FIRST_SUB_WINDOW;
媒體視窗,例如視頻。顯示於宿主視窗下層。
public static final int TYPE_APPLICATION_MEDIA = FIRST_SUB_WINDOW+1;
應用程式視窗的子面板。顯示於所有面板視窗的上層。(GUI的一般規律,越“子”越靠上)
public static final int TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW +2;
對話方塊。類似於面板視窗,繪製類似於頂層視窗,而不是宿主的子視窗。
public static final int TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW +3;
媒體資訊。顯示在媒體層和程式視窗之間,需要實現透明(半透明)效果。(例如顯示字幕)
public static final int TYPE_APPLICATION_MEDIA_OVERLAY = FIRST_SUB_WINDOW +4;
子視窗結束。( End of types of sub-windows )
public static final int LAST_SUB_WINDOW = 1999;
系統視窗。非應用程式建立。
public static final int FIRST_SYSTEM_WINDOW = 2000;
狀態列。只能有一個狀態列;它位於螢幕頂端,其他視窗都位於它下方。
public static final int TYPE_STATUS_BAR = FIRST_SYSTEM_WINDOW;
搜尋欄。只能有一個搜尋欄;它位於螢幕上方。
public static final int TYPE_SEARCH_BAR = FIRST_SYSTEM_WINDOW+1;
電話視窗。它用於電話互動(特別是呼入)。它置於所有應用程式之上,狀態列之下。
public static final int TYPE_PHONE = FIRST_SYSTEM_WINDOW+2;
系統提示。它總是出現在應用程式視窗之上。
public static final int TYPE_SYSTEM_ALERT = FIRST_SYSTEM_WINDOW +3;
鎖屏視窗。
public static final int TYPE_KEYGUARD = FIRST_SYSTEM_WINDOW +4;
資訊視窗。用於顯示toast。
public static final int TYPE_TOAST = FIRST_SYSTEM_WINDOW +5;
系統頂層視窗。顯示在其他一切內容之上。此視窗不能獲得輸入焦點,否則影響鎖屏。
public static final int TYPE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW +6;
電話優先,當鎖屏時顯示。此視窗不能獲得輸入焦點,否則影響鎖屏。
public static final int TYPE_PRIORITY_PHONE = FIRST_SYSTEM_WINDOW +7;
系統對話方塊。(例如音量大小框)。
public static final int TYPE_SYSTEM_DIALOG = FIRST_SYSTEM_WINDOW +8;
鎖屏時顯示的對話方塊。
public static final int TYPE_KEYGUARD_DIALOG = FIRST_SYSTEM_WINDOW +9;
系統內部錯誤提示,顯示於所有內容之上。
public static final int TYPE_SYSTEM_ERROR = FIRST_SYSTEM_WINDOW +10;
內部IME視窗,顯示於普通UI之上。應用程式可重新布局以免被此視窗覆蓋。
public static final int TYPE_INPUT_METHOD = FIRST_SYSTEM_WINDOW +11;
內部IME對話方塊,顯示於當前IME視窗之上。
public static final int TYPE_INPUT_METHOD_DIALOG= FIRST_SYSTEM_WINDOW +12;
牆紙視窗。 public static final int TYPE_WALLPAPER = FIRST_SYSTEM_WINDOW +13;
狀態列的滑動面板。 public static final int TYPE_STATUS_BAR_PANEL = FIRST_SYSTEM_WINDOW +14;
系統視窗結束。 public static final int LAST_SYSTEM_WINDOW = 2999;
案例實現控制螢幕亮度:
1 private void setScreenBrightness(int paramInt){2 Window localWindow = getWindow();3 WindowManager.LayoutParams localLayoutParams = localWindow.getAttributes();4 float f = paramInt / 255.0F;5 localLayoutParams.screenBrightness = f;6 localWindow.setAttributes(localLayoutParams);7 }
Android(java)學習筆記101:WindowManager 中LayoutParams的各種屬性