Window類,位於代碼樹frameworks\base\core\java\android\view\Windowjava.java文件。連同註釋,這個文件總共一千多行,它概括了Android窗口的基本屬性和基本功能。
繼承關係
public abstract class Window extends Object
java.lang.Object
↳ android.view.Window
構造函數
public Window (Contextcontext)
常量
常用的幾個列舉:
FEATURE_OPTIONS_PANEL =0; 功能不明,參見後面的說明(默認使能)
FEATURE_NO_TITLE =1; 無標題欄
FEATURE_PROGRESS =2; 在標題欄上顯示加載進度,例如webview加載網頁時(條狀進度條)
FEATURE_LEFT_ICON =3; 在標題欄左側顯示一個圖標
FEATURE_RIGHT_ICON =4; 在標題欄右側顯示一個圖標
FEATURE_INDETERMINATE_PROGRESS = 5; 不確定的進度(圓圈狀等待圖標)
FEATURE_CONTEXT_MENU =6; 上下文菜單,相當於PC上的右鍵菜單(默認使能)
FEATURE_CUSTOM_TITLE =7; 自定義標題欄,該屬性不能與其他標題欄屬性合用
FEATURE_OPENGL =8; 如果開啓OpenGL,那麼2D將由OpenGL處理(OpenGL中2D是3D的子集)
PROGRESS_VISIBILITY_ON =-1; 進度條可見
PROGRESS_VISIBILITY_OFF =-2; 進度條不可見
PROGRESS_INDETERMINATE_ON =-3; 開啓不確定模式
PROGRESS_INDETERMINATE_OFF =-4; 關閉不確定模式
PROGRESS_START =0; 第一進度條的最小值
PROGRESS_END =10000; 第一進度條的最大值
PROGRESS_SECONDARY_START =20000; 第二進度條的最小值
PROGRESS_SECONDARY_END =30000; 第二進度條的最大值
*說明:FEATURE_OPTIONS_PANEL的意思大概是:當用戶選中菜單時,窗口將調用onOptionsItemSelected函數,以處理菜單功能。如果沒有FEATURE_OPTIONS_PANEL選項,那麼菜單就不響應了?沒試過,網上也沒找到。
應用示例(在 Activity 中):
1、隱藏標題欄
requestWindowFeature(Window.FEATURE_NO_TITLE);
2、在標題欄顯示進度條
requestWindowFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.progressbar_1);
setProgressBarVisibility(true);
final ProgressBar progressHorizontal =(ProgressBar)findViewById(R.id.progress_horizontal);
setProgress(progressHorizontal.getProgress() * 100);
setSecondaryProgress(progressHorizontal.getSecondaryProgress()*100);
3、使用自定義標題欄
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.xxx);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.my_title_bar);
4、清除標題欄內容,而區域保留
((ViewGroup)getWindow().findViewById(com.android.internal.R.id.title_container)).removeAllViews();
5、隱藏標題欄
((ViewGroup)getWindow().
findViewById(com.android.internal.R.id.title_container)).setVisibility(View.GONE);
6、顯示標題欄
...setVisibility(View.VISIBLE);
*其他注意事項
(1) requestWindowFeature()要在setContentView()之前調用;
(2) 設置各種Feature,是具有排它性的,一旦設置,後續不可更改爲別的類型;
(3)當使用TabHost(由ActivityGroup派生)時,各個Tab裏的Activity,要麼都是NO_TITLE,要麼都是CUSTOM_TITLE,無法分別進行設置
內部嵌套類
interface Window.Callback
API from a Window back to its caller.它包含一系列dispatchXxxx函數和一系列onXxxx函數,用於處理UI事件.
CallBack 接口包含以下函數:
- public boolean dispatchKeyEvent(KeyEventevent);
處理Key事件。至少,你的代碼要調用superDispatchKeyEvent函數。 - public booleandispatchTouchEvent(MotionEvent event);
處理touch事件。至少,你的代碼要調用superDispatchTouchEvent函數。 - public booleandispatchTrackballEvent(MotionEvent event);
處理trackball事件。至少,你的代碼要調用superDispatchTrackballEvent函數。 - publicbooleandispatchPopulateAccessibilityEvent(AccessibilityEventevent);
處理Accessibility事件(輔助事件,如焦點變化,按鈕被點擊等),處理完成後返回true。
創建顯示panel的view
可返回null,將爲你創建默認content(通常是一個menu)。
應返回放置panel的頂層view。 - public View onCreatePanelView(intfeatureId);
初始化panel菜單,如果onCreatePanelView函數返回null將調用此函數,創建一個標準菜單,你可以向它添加菜單項。只有當panel第一次顯示時方調用此函數。如果返回false,panel將無法顯示。 - public boolean onCreatePanelMenu(intfeatureId, Menumenu);
每次panel窗口顯示前,都會調用此函數。應當返回true,如果返回false將不顯示。 - public boolean onPreparePanel(intfeatureId, View view, Menumenu);
當用戶打開panel的菜單時被調用。當菜單樣式切換時也會調用。例如,從圖標菜單切換至擴展菜單。
返回true允許菜單打開,返回false阻止菜單打開。 - public boolean onMenuOpened(intfeatureId, Menu menu);
用戶選擇菜單項。 - public boolean onMenuItemSelected(intfeatureId, MenuItemitem);
當前窗口屬性改變。 - publicvoidonWindowAttributesChanged(WindowManager.LayoutParamsattrs);
窗口的view發生改變。 - public voidonContentChanged();
窗口焦點變化。 - public void onWindowFocusChanged(booleanhasFocus);
窗口附加到窗口管理器上。 - public voidonAttachedToWindow();
窗口從窗口管理器上摘除。 - public voidonDetachedFromWindow();
panel關閉時被調用。
如果一個後續的panel將展開(此panel爲後續panel騰出空間),則不會調用此函數。 - public void onPanelClosed(int featureId,Menu menu);
當用戶按下了search按鈕。 - public booleanonSearchRequested();
如果啓動了搜索界面則返回true,如果不能執行則返回false。
常用方法展列
- public WindowManager getWindowManager ()
Return the window manager allowing this Window to display its ownwindows.