android.view.window类详解

来源:互联网 发布:大数据存储和处理 编辑:程序博客网 时间:2024/05/22 23:31

    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.


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机卡和手机不兼容怎么办 vivo手机下载吃鸡不兼容怎么办 vivox3t不兼容支付宝怎么办 移动sim卡坏了怎么办 cpu和主板不兼容怎么办 主板与cpu不兼容怎么办 cpu跟主板不兼容怎么办 软件与电脑不兼容怎么办 win8系统无限重启怎么办 安装微信旧版本登录提示升级怎么办 手机软件与系统不兼容怎么办 下载旧版本微信闪退登陆不了怎么办 企业微信一直登录失败怎么办 360浏览器9.1经常卡死怎么办 手机版爱奇艺看电影屏幕变小怎么办 找不到旧版本米聊怎么办 苹果id被锁了怎么办 新浪微博支付宝解绑失败怎么办 阿里妈妈升级看不到引流人数怎么办 阿里妈妈账号被冻结怎么办 微博昵称到次数怎么办 五星好评之后忘记截图了怎么办 评价后忘了截图怎么办 好评率太低不能买东西了怎么办 淘宝评价被删了怎么办 淘宝店铺有流量没有成交怎么办 淘宝好评被删了怎么办 淘宝评论被系统删除怎么办 淘宝被商家删除评价怎么办 淘宝评价管理商家删除了怎么办 淘宝商家删除评价我该怎么办 我的评价隐藏了怎么办 淘宝把评论删了怎么办 淘宝虚假交易被删除评价怎么办 淘宝好评评错了怎么办 被淘宝骗了好评怎么办 美团好评被删了怎么办 卖家收到好评内容是差评怎么办 淘宝收货电话写错了怎么办 淘宝评价写错了怎么办 饿了么商家差评怎么办