android.view.window類詳解

    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.


發佈了9 篇原創文章 · 獲贊 4 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章