基于Android的窗口控制栏显示方法及装置的制造方法_2

文档序号:9843842阅读:来源:国知局
SYSTEM_ALERT
[0063]TYPE_KEYGUARD
[0064]TYPE_T0AST
[0065]C、在某些实施例中,原生Android的应用程序窗口显示的简单过程为:[ΟΟ??] ①应用启动(一般为Activity调用onCreate接口开始);
[0067]②创建应用窗口视图;
[0068]③通过窗口管理服务(WindowManagerService)来通知显示模块显示界面。
[0069]如附图3所示为系统创建应用程序窗口视图的过程,会把应用自定义的视图加入到根视图对象(DecorView)中,然后系统根据DecorView中的视图,从根往上画出各个子view,应用自定义视图的子view的排列类似为一个容器各个小模块结构排列。而且系统各个子view添加到容器中,是类似于树形的结构添加,子视图还可以为容器视图,这样就可递归的添加子视图AecorView可理解为一个容器的根视图,应用自定义的视图会添加到该视图中。系统画一个窗口时,就以DecorView为单位根据该树形结构顺序逐层画出窗口。
[0070]在本方法的一些实施例中,在步骤SlOO创建应用程序窗口视图过程中,判断该窗口的类型,还进行步骤S102如果为应用窗口类型,添加控制栏;如果为子窗口类型或者系统窗口类型,就无需添加控制栏,因为该类型窗口需依附父窗口存在。窗口类型判断请参考上文。当需要创建控制栏的视图,通过添加视图(addView)的方式加入到应用程序窗口的视图对象(DecorView)中,并固定的排在该应用窗口的最上面,最终控制栏与应用窗口一并显不O
[0071 ] 具体地,DecorView可理解为一个容器的根视图,本装置中使用LinearLayout容器视图把控制栏视图和应用自定义视图合为一个视图,然后添加到根视图DecorView中。LinearLayout视图容器可按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。本装置使用垂直排列,就是每个子视图为一层一层顺序排列,控制栏视图位于应用自定义视图上方。合为一个视图后再添加到DecorView中,然后系统会根据该DecorView画出窗口。
[0072]在某些实施例中,应用自定义的视图加入到DecorView容器中,最终系统根据该容器合成的视图画出一个窗口。在另一些实施例中,在添加到该容器前,把一个控制栏视图和应用自定义视图垂直合成为Linear Layout视图,并让它排在应用自定义视图的上方,应用自定义视图排在控制栏下方,让系统合成应用窗口时,加入控制栏视图。达到每个应用都会添加控制栏的目的,然后通过操作状态栏区域控制窗口 ;
[0073]为应用窗口添加了视图后,还进行步骤S104为控制栏添加按钮。
[0074]C.控制栏上按钮功能跟手势操作的实现:
[0075]本实施例中添加的控制栏为水平方向排列的线性布局(LinearLayout),各功能按钮(单独View)按LinearLayout添加子元素的方式,在水平方向排列加入到控制栏的视图容器中,按钮视图为View类型,这里通过View.setOnClickListener方法来实现对控制栏上按键或者本身的点击跟鼠标事件的监听,通过获取控制栏视图(View)的IWindowSess1n对象,来调用窗口管理服务(WindowManagerService)来动态管理窗口。此外,由于控制栏视图采用的是线性布局,所以本装置支持包括用上述在线性布局中添加子元素(View)的方式,来添加想要扩展的其它功能按钮,再根据对所添加的视图(View)的监听,来添加入想要扩展的功能,所述功能可以事先设定,称之为预设功能,包括如弹出菜单功能的按钮等。在某些具体的实施例中,所述按钮包括最小化按钮、关闭按钮或缩放切换按钮,所述最小化按钮的预设功能用于将应用窗口后台运行,所述关闭按钮的预设功能用于将应用窗口对应应用程序关闭,所述缩放切换按钮的预设功能用于改变应用窗口显示的大小,等等。通过上述方法,能够在安卓系统中为应用添加控制栏,为多窗口显示安卓应用提供了便利,另外,设计了在控制栏中添加按钮实现预设功能的方法,除了上述系统级预设功能,应用程序也可以调用按钮接口,实现应用程序专用的功能,如音乐软件的切歌、网页浏览器的历史记录、收藏等按钮都可以通过本方法实现,使得用户使用安卓应用更加得心应手,解决了用户使用不便的问题。
[0076]进一步地,还包括步骤S106,当接收到触摸信号时,计算判断该触摸的触点是否在控制栏内,若判断为是,则进行步骤S108对触摸信号进行事件响应,若否则不进行事件响应;所述触摸信号包括单击、双击或拖动。其中,计算判断该触摸的触点是否在控制栏内的具体方法为:获取触点坐标,将触点坐标转换为当前控制栏显示的对应坐标。这里可以根据控制栏或应用视图的自身坐标系与屏幕显示坐标进行换算,结合控制栏的显示范围判断触点是否落在控制栏内。
[0077]进一步地,还包括步骤,当接收到触摸信号时,计算判断该触摸的触点是否在应用程序显示范围,若判断为是,则进行步骤SllO将对应的应用程序窗口显示在最前。
[0078]“显示在最前”的实际做法可以通过如下方式完成:触发后在窗口管理服务(WindowManagerService)中通过重新设置当前应用的WindowState对象所描述的窗口实际要显示的Z轴位置,然后通知服务更新窗口显示。这里主要设置的是窗口的Z轴位置,让标记的窗口始终保持最前;这里的Z轴位置是自定义的窗口坐标属性,所述Z轴定义为垂直于屏幕的坐标轴,Z轴位置坐标越大则对应的窗口视图显示得越靠前。
[0079]在某些实施例中,进行步骤,接收触摸信号,计算判断到该触摸的触点在控制栏内,并触摸到“最小化”按钮:则进行事件响应:通过ActivityManagei^moveTaskToBackS法将当前应用放到后台,达到不可见效果;
[0080]在另一些实施例中,进行步骤,接收触摸信号,计算判断到该触摸的触点在控制栏内,并触摸到“缩放切换”按钮,则进行时间响应:在窗口管理服务(WindowManagerService)中通过重新设置当前应用的WindowState对象所描述的窗口的变换矩阵,然后通知服务更新窗口显示。这里主要设置的是窗口在宽度和高度上的缩放因子(WindowState的mHScale和mVScale成员)。本实施例中这个功能区别于一般的最大化功能,支持三级缩放,S卩2/3缩放、1/4缩放或全屏缩放,能满足最常用的窗口变换需求。
[0081]在其他一些实施例中,进行步骤,接收触摸信号,计算判断到该触摸的触点在控制栏内,并触摸到“关闭”按钮,贝Ij进行事件响应:通过ActivityManager的removeTask方法关闭该应用,此方式在关闭显示的同时把该应用从任务列表中清除;
[0082]在另一些实施例中,进行步骤,接收触摸信号,计算判断到该触摸的触点在控制栏内,触摸事件拦截判断为拖动,则进行事件响应:则开始监听事件的拖动(MOVE)操作,并根据接收到的触摸信号计算新的坐标传给窗口管理服务(WindowManagerService),通过调用此服务来实时刷新窗口位置。
[0083]在某些实施例中,还包括步骤,接收触摸信号,计算判断到该触摸的触点在控制栏内,所述触摸事件为双击手势则进行缩放功能,以控制栏的视图为View类型为例,可以用View.setOnClickListener方法监听点击事件,通过计算两次点击事件的时间差,来判断是否是双击事件,如果是在窗口管理服务(WindowManagerService)中通过重新设置当前应用的WindowState对象所描述的窗口的变换矩阵,然后通知服务更新窗口显示。这里主要设置的是窗口在宽度和高度上的缩放因子(WindowState的mHScale和mVScale成员)。本实施例中这个功能区别于一般的最大化功能,支持三级缩放,即2/3缩放、1/4缩放或全屏缩放,三级窗口大小依次显示,每接收依次双击手势触摸事件进行一次大小变换。
[0084]除了上述功能外,控制栏还支持其它功能按钮的扩展,如menu菜单功能按钮等,原理与上面添加按钮的方式一致。
[0085]综上,该装置在每个应用显示的window(PhoneWindow)中,用加载应用本身所定义布局(UI)相同的方式,加入新增控制栏的布局(UI),并支持一些常用的窗口管理操作;此实现方式可以保证不影响原生的显示流程,保证兼容性。
[0086]通过对“控制栏”按钮操作,或者手势操作,用户可以较方便地对当前窗口的大小,显示位置等进行同时调整,和对当前窗口进行窗口缩放切换、最小化、窗口置顶、关闭操作,并且不影响应用窗口本身的内容显示,在某些具体的实施例中,参见附图显示
[0087]1)、当用户点击一个应用图标,进入该应用界面后,
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1