Window

1 Window属性列举如下: 

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选项,那么菜单就不响应了?没试过,网上也没找到。 
2 应用示例: 
(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); 
  其他注意事项 
     a) requestWindowFeature()要在setContentView()之前调用; 
     b) 设置各种Feature,是具有排它性的,一旦设置,后续不可更改为别的类型; 
     c)当使用TabHost(由ActivityGroup派生)时,各个Tab里的Activity,要么都是NO_TITLE,要么都是    CUSTOM_TITLE,无法分别进行设置。

2方法

Window类除去一大堆FEATURE_属性之外,剩下的内容无外乎两大部分: 
  A:定义Callback接口,它包含一系列dispatchXxxx函数和一系列onXxxx函数,用于处理UI事件; 
  B: 定义了自己的WindowManager——LocalWindowManager。主要修改了addView函数,设置title。 
(1)Callback接口包含以下函数: 
public boolean dispatchKeyEvent(KeyEventevent); 
处理Key事件。至少,你的代码要调用superDispatchKeyEvent函数。 
public boolean dispatchTouchEvent(MotionEvent event); 
处理touch事件。至少,你的代码要调用superDispatchTouchEvent函数。 
public boolean dispatchTrackballEvent(MotionEvent event); 
处理trackball事件。至少,你的代码要调用superDispatchTrackballEvent函数。 
public boolean dispatchPopulateAccessibilityEvent(AccessibilityEventevent); 
处理Accessibility事件(辅助事件,如焦点变化,按钮被点击等),处理完成后返回true。 
创建显示panel的view 
可返回null,将为你创建默认content(通常是一个menu)。 
应返回放置panel的顶层view。 
public View on CreatePanelView(intfeatureId); 
初始化panel菜单,如果onCreatePanelView函数返回null将调用此函数,创建一个标准菜单,你可以向它添加菜单项。只有当panel第一次显示时方调用此函数。如果返回false,panel将无法显示。 
public boolean onCreatePanelMenu(intfeatureId, Menu menu); 
每次panel窗口显示前,都会调用此函数。应当返回true,如果返回false将不显示。 
public boolean onPreparePanel(intfeatureId, View view, Menu menu); 
当用户打开panel的菜单时被调用。当菜单样式切换时也会调用。例如,从图标菜单切换至扩展菜单。 
返回true允许菜单打开,返回false阻止菜单打开。 
public boolean onMenuOpened(intfeatureId, Menu menu); 
用户选择菜单项。 
public boolean onMenuItemSelected(intfeatureId, MenuItem item); 
当前窗口属性改变。 
public void onWindowAttributesChanged(WindowManager.LayoutParamsattrs); 
窗口的view发生改变。 
public void onContentChanged(); 
窗口焦点变化。 
public void onWindowFocusChanged(booleanhasFocus); 
窗口附加到窗口管理器上。 
public void onAttachedToWindow(); 
窗口从窗口管理器上摘除。 
public void onDetachedFromWindow(); 
panel关闭时被调用。 
如果一个后续的panel将展开(此panel为后续panel腾出空间),则不会调用此函数。 
public void onPanelClosed(int featureId,Menu menu); 
当用户按下了search按钮。 
如果启动了搜索界面则返回true,如果不能执行则返回false。 
public boolean onSearchRequested(); 
   WindowManager干什么?它并不是什么“窗口管理器”,WindowManagerService才是窗口管理器。名字叫的玄乎,而实际上WindowManager主要管理一堆状态字,而这些状态字里,最常用的就是LayoutParams。 
   派生关系如下: 
   ViewManager 
       | 
        ---- >WindowManager 
   ViewManager只有三个函数:addView,updateViewLayout,removeView。 
   而WindowManager的LayoutParams子类内容十分丰富。其实WindowManager.java的主要内容就是由这个类定义构成。它的定义如下: 
public static class LayoutParams extendsViewGroup.LayoutParams implementsParcelable 
   派生关系如下: 
   ViewManager.LayoutParams 
       | 
        ---- >WindowManager.LayoutParams 
   ViewManager的LayoutParams主要有两个宏,两个变量。 
两个宏: 
   FILL_PARENT 
   WRAP_CONTENT 
两个变量: 
    width 
    height 
   WindowManager的LayoutParams就比较丰富了,《点击查看 LayoutParams

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值