CN108279827A - 一种控制智能终端导航栏隐藏及显示的方法 - Google Patents
一种控制智能终端导航栏隐藏及显示的方法 Download PDFInfo
- Publication number
- CN108279827A CN108279827A CN201810128986.9A CN201810128986A CN108279827A CN 108279827 A CN108279827 A CN 108279827A CN 201810128986 A CN201810128986 A CN 201810128986A CN 108279827 A CN108279827 A CN 108279827A
- Authority
- CN
- China
- Prior art keywords
- navigation bar
- long
- display
- state
- press event
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
- G06F3/0482—Interaction with lists of selectable items, e.g. menus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0484—Interaction techniques based on graphical user interfaces [GUI] for the control of specific functions or operations, e.g. selecting or manipulating an object, an image or a displayed text element, setting a parameter value or selecting a range
- G06F3/04847—Interaction techniques to control parameter settings, e.g. interaction with sliders or dials
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0487—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser
- G06F3/0488—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures
- G06F3/04883—Interaction techniques based on graphical user interfaces [GUI] using specific features provided by the input device, e.g. functions controlled by the rotation of a mouse with dual sensing arrangements, or of the nature of the input device, e.g. tap gestures based on pressure sensed by a digitiser using a touch-screen or digitiser, e.g. input of commands through traced gestures for inputting data by handwriting, e.g. gesture or text
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Multimedia (AREA)
- Mobile Radio Communication Systems (AREA)
- Navigation (AREA)
Abstract
本发明提供一种控制智能终端导航栏隐藏及显示的方法,通过给SystemUi.apk中操作导航栏的模块注册一个显示或隐藏导航栏的广播,然后在接收到广播后,获取到当前系统导航栏的状态,接着使用系统自带的WindowManager(窗口管理器)将其添加到系统窗口中;在接收到隐藏导航栏的广播后,使用WindowManager(窗口管理器)将之前添加的导航栏移除掉即可实现隐藏导航栏的目的。
Description
技术领域
本发明属于智能终端技术领域,具体涉及一种控制智能终端导航栏隐藏及显示的方法。
背景技术
目前,触屏智能按键主要有两种形式,一种是使用实体键,一种是虚拟键。对于前者,市面上的实体键又分为两种,一种是物理按键,例如,苹果的home(主页)键就是典型的物理按键;一种是触控按键,常见的手机有三星,小米,如小米4的底部就采用触控按键实现,包含最近任务,主页和返回键三个触控按键。物理按键通常可以点亮屏幕,而触控按键一般则很难实现。物理按键手感也较虚拟按键更好一些,但是经过长期使用后,容易出现按键使用失效或不灵敏的情况。虚拟键本身就是触摸屏的一部分,通过软件设置,可以动态调整各个虚拟键的位置,并且用户可以通过系统暴露的菜单对其进行隐藏或者显示,使用起来并不比实体键复杂,使用习惯后,虚拟键会比实体键有更好的用户体验。使用虚拟键的另一个好处是只要触摸屏没有损坏,用户就可以一直使用。所以现在越来越多的手机厂商开始选择虚拟键,因为如果虚拟键设计的合理,好用,用户体验不仅不会下降,整个手机的成本也会更有优势。而虚拟键的载体一般都是通过虚拟导航栏来实现,有的厂商允许对虚拟导航栏进行编辑,由用户决定导航栏都放那些按键,以及它们的位置。但是很少有厂商考虑对导航栏的动态控制,目前市场上有的厂商虽然实现了可以通过菜单进行控制,但并不是很方便,如果想隐藏或者显示,只能操作设置菜单。还有一些应用做了一些处理,在Android4.4上借助系统的沉浸模式,可以根据不同的场景,当单击手机屏幕时,可以动态显示或者隐藏导航栏,但这些都是应用程序级别的修改,对于实现系统级别的动态控制虚拟导航栏还没有见到。此发明就是用于解决此类问题的一种方法,可以实现系统级别的动态控制虚拟导航栏。
现有技术中通过预设的拦截层,来判断用户输入的触屏操作是否符合程序设置的条件,如果符合条件就显示导航栏,如果不符合条件,就等待条件直到符合要求,然后再显示导航栏。这两种情况最终都要在显示导航栏后取消显示拦截层。现有技术存在以下三个缺点:一是只能显示导航栏,无法隐藏导航栏;二是需要额外增加一个拦截层来接收用户的触屏操作,增加这个拦截层将涉及到整个系统的按键事件传递机制的修改,如果修改不当,就会造成整个系统的崩溃增加了系统的实现难度,并且不利于维护;三是不能根据用户的操作,随时动态的显示或者隐藏导航栏,只能满足一定的条件后才能显示导航栏,也无法做到控制导航栏的隐藏。
发明内容
为克服上述现有技术的不足,本发明提供了一种控制智能终端导航栏隐藏及显示的方法。
采用此方案后,首先不需要额外增加一个拦截层,不用对系统进行大规模的修改,只需要修改SystemUi.apk(一个系统应用程序)这个系统应用,以及所有视图的基类View(视图)即可。通过给SystemUi.apk(一个系统应用程序)中操作导航栏的模块注册一个显示或隐藏导航栏的广播,然后在接收到广播后,首先获取到当前系统导航栏的状态,接着使用系统自带的WindowManager(窗口管理器)将其添加到系统窗口中就可以正常显示了;在接收到隐藏导航栏的广播后,同样使用WindowManager(窗口管理器)将之前添加的导航栏移除掉即可实现隐藏导航栏的目的。以上是显示和隐藏的大概实现原理,但还需要在基类View中的长按事件处理方法中来触发显示和隐藏,主要是发送显示或隐藏的广播即可。本方案通过长按当前页面的空白区域来决定是否发送这个广播,好处是当用户长按空白区域时,如果当前应用没有对长按事件进行处理,那系统就会把这个长按事件返回给系统,我们在系统的最后再处理这个长按事件,这样不会和应用的长按事件产生冲突,也不影响原有系统的事件触发和处理机制,因此不会对系统稳定性造成影响。并且某个应用的空白区域很好找到,可以很方便的进行长按操作。
本发明提供的一种控制智能终端导航栏隐藏及显示的方法,包含如下步骤:
S301、开始;
S302、系统开机,进入桌面或某个应用中,导航栏默认为开启状态;S303、长按当前界面的空白区域,当前界面接收到长按事件;
S304、长按事件传递到基类视图中,在基类视图中处理长按事件;
S305、判断长按区域是否注册了长按事件监听器;如果判断结果为是,则执行S306;如果判断结果为否,则执行S308;
S306、响应长按事件的监听器,触发回调函数,执行相应的功能;
S307、本界面消费了长按事件,无法再继续操作导航栏,执行S3013;
S308、在基类View的相关方法中处理长按事件;
S309、创建一个自定义的广播消息,并将其发送出去;
S3010、systemUI中的PhoneStatusBar模块接收并处理此广播消息;
S3011、进入导航栏的显示和隐藏子流程,处理广播消息,根据当前导航栏状态,决定是显示或隐藏;
S3012、完成导航栏的显示和隐藏功能;
S3013、结束长按事件的处理并退出。
根据本发明的一个优选实施方式,通过在PhoneStatusBar模块中的start()方法中调用addNavigationBar()方式来实现添加导航栏。
根据本发明的一个优选实施方式,在基类视图中的performLongClick()方法中处理长按事件。
根据本发明的一个优选实施方式,基类View中的performLongClick()判断存储监听器的类信息ListenerInfo是否为空,如果不为空,并且它的长按事件监听器mOnLongClickListener也不为空,则执行监听器的回调方法onLongClick,来处理长按事件对应的功能。
根据本发明的一个优选实施方式,如果注册了监听器,存储监听器的类信息ListenerInfo不为空,且事件监听器mOnLongClickListener也不为空,则执行监听器的回调方法onLongClick,处理长按事件对应的功能。
根据本发明的一个优选实施方式,如果应用没有注册长按事件的监听器,如果存储监听器的类信息ListenerInfo为空,或者事件监听器mOnLongClickListener为空,则长按事件不会被消费掉,继续往下游传递。
根据本发明的一个优选实施方式,借助Context上下文的sendOrderedBroadcast()方法,发送一个在手机状态栏模块PhoneStatusBar中创建的“action_show_or_hide_navigation”广播消息,表示要对导航栏进行操作,执行显示或者隐藏。
根据本发明的一个优选实施方式,其中通过注册,并监听广播的方式来触发显示或隐藏导航栏功能的具体流程如下:
S401、系统开机;
S402、系统初始化和加载systemUI系统应用程序;
S403、初始化PhoneStatusBar模块,显示导航栏;
S404、初始化导航栏的状态值mIsDisplayNavigation,将其置为真(true);
S405、创建显示和隐藏导航栏;
S406、注册一个广播,利用广播接收器监听对导航栏的操作;
S407、进入监听此广播状态;
S408、判断是否接收到操作导航栏的广播;如果判断结果为否,则实行S409;如果判断结果为是,则执行S4010;
S409、待机运行,继续监听,返回执行S407;
S4010、接收到广播消息,根据当前状态操作导航栏;如果收到了此广播消息,然后根据mIsDisplayNavigation的状态,来决定是显示导航栏,还是隐藏导航栏;
S4011、判断状态标志mIsDisplayNavigation是否为true,如果判断结果为是,则执行S4013,如果判断结果为否,则执行S4012;
S4012、当前的导航栏为隐藏状态,调用显示方法addNavigationBar(),显示导航栏,并且将标志mIsDisplayNavigation置为true;
S4013、当前的导航栏为显示状态,则调用隐藏方法removeNavigationBar(),隐藏导航栏,并且将标志mIsDisplayNavigation置为false,继续执行S4014;
S4014、完成本次操作,继续等待接收广播。
根据本发明的一个优选实施方式,用布尔值mIsDisplayNavigation来表示导航栏显示的状态,当其为true时表示显示状态;为fasle时表示隐藏状态。在初始化导航栏时我们将其置为true,表示默认为显示导航栏。
根据本发明的一个优选实施方式,显示导航栏借助系统addNavigationBar()来实现,隐藏方法通过定义removeNavigationBar(),内部通过调用窗口管理器WindowManager的removeView来实现隐藏导航栏。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
图1示出了根据本发明的一个实施例的导航栏显示状态示意图;
图2示出了根据本发明的一个实施例的导航栏隐藏状态示意图;
图3示出了根据本发明的一个实施例的隐藏及显示导航栏的方法流程;
图4示出了根据本发明的一个实施例的通过注册,并监听广播的方式来触发显示或隐藏导航栏功能的方法流程;
图5示出了根据本发明的一个实施例的通过长按应用空白区域来触发显示或隐藏导航栏的方法流程。
具体实施方式
为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的控制智能终端导航栏隐藏及显示的方法其具体实施方式、特征及其功效,详细说明如后。在下述说明中,不同的“一实施例”或“实施例”指的不一定是同一实施例。此外,一或多个实施例中的特定特征、结构、或特点可由任何合适形式组合。
本发明涉及的缩略语和关键术语定义如下:
Android:中文名称为安卓,是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。本文写稿时(2017.12)系统版本已经更新到了Android 8.0。
Activity:Activity中文名称翻译为活动。Activity是Android组件中最基本也是最常用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之一。它是一个应用程序组件,提供一个屏幕,用户可以用来与之交互完成某项任务。
Fragment:Fragment是Android 3.0中引入的概念,意为碎片、片段,它是为了解决不同屏幕分辩率的动态和灵活UI设计而诞生的。Fragment可以看作Activity的界面中的一部分或一种行为。可以把多个Fragment组合到一个activity中来创建一个多面界面,并且可以在多个Activity中重用一个Fragment。
广播:Android广播是一种广泛的应用在应用程序之间传输信息的机制,广播分为广播发送者和广播接收者,BroadcastReceiver广播接收器是Android的四大组件之一,它指的就是广播接收者。
导航栏:从Android4.0开始,谷歌开始把导航栏引入到系统中,而到Android4.4上才可以控制导航栏的显示和隐藏。导航栏指的是位于手机屏幕底部的,一般有三个虚拟按键—“返回”,“主页”和“最近任务”的一个长条区域,这三个虚拟按键分别对应的是“返回上一级操作”、“返回系统桌面”和“打开最近任务管理”三项功能,利用此按钮可直接实现系统按键的功能。在没有实体按键的手机上,这三个虚拟按键应该是手机使用最频繁的功能。
由于在Android4.0版本中,才首次引入了导航栏,因此实施本发明需要系统版本为Anroid4.0或以上版本。图1示出了导航栏显示状态示意图,屏幕下方从左到右共有三个虚拟按键--“返回”,“主页”和“最近任务”,利用这些虚拟按键可以替代实体按键,并且使用习惯和用户体验不会受多大影响,还能节省手机本身的成本。根据本发明的一个具体实施方式,长按这个界面的任意空白区域,动态控制导航栏的显示和隐藏。当导航栏隐藏时,如图2所示,导航栏隐藏后,快捷菜单位于屏幕最下方,此时如果再次长按空白区域,导航栏将再次显示为如图2所示,位于屏幕最下方,而快捷菜单位于导航栏上方。
首先在模块PhoneStatusBar(手机状态栏)对应的底层文件PhoneStatusBar.java(手机状态栏对应的java文件)中,定义一个私有的静态布尔变量mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态),用它来记录导航栏的显示状态,当其为true(真)时,表示导航栏为显示或可见状态;当为false(假)时,表示导航栏为隐藏或不可见状态。根据导航栏的初始状态,决定mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)的初始值。
然后,在PhoneStatusBar.java(手机状态栏文件对应的java文件)中实现导航栏的显示方法和隐藏方法。显示方法通过调用WindowManager(窗口管理器)的addView()(一个方法名)方法,将定义好的导航栏(使用变量mNavigationBarView来表示),添加到系统窗口管理器的方式来实现。隐藏方法通过调用WindowManager(窗口管理器)的addView()(一个方法名)方法,将代表导航栏的变量mNavigationBarView从系统窗口管理器中移除的方式来实现。
接着,在PhoneStatusBar.java(手机状态栏文件对应的java文件)中注册一个广播消息,广播消息一般使用字符串来表示,我们假设使用“action_show_or_hide_navigation”(字符串常量,表示一个广播消息)这样一个字符串来表示这个广播,并且定义这个广播的接收器,在接收器中,当接收到这个广播时,根据之前mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)记录下来的导航栏状态,来决定显示或者隐藏。如果之前导航栏时显示状态,那么收到这个广播后,将其隐藏,并且修改mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)的值为false(假);如果之前是隐藏状态,那么收到这个广播后,将其显示,并且修改mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)的值为true(真)。
最后,我们在基类View中的performLongClick()(一个方法名)方法处理空白区域的长按事件。当长按当前界面的空白区域时,例如,图1或图2中的空白区域,我们会等待当前应用先处理这个长按事件。例如,当前应用可能注册了上下文菜单的监听器,当长按空白区域时,这个监听器会首先响应到长按事件,从而弹出定义的上下文菜单,这时候长按事件就被此应用消费掉,不会再往上层View(视图)传递,也就不会再操作导航栏。如果当前应用程序并没有在长按的空白区域上注册任何监听器或者事件处理,此时这个长按事件会返回到系统的基类View(视图)中,具体还是在performLongClick()(一个方法名)方法中处理,我们在这个方法中就可以来决定是否发送广播消息,从而操作导航栏的显示和隐藏。主要方法是创建一个广播消息“action_show_or_hide_navigation”(字符串常量,表示一个广播消息),然后将其发送出去,PhoneStatusBar(手机状态栏)模块已经注册并监听这个广播,它在收到这个广播后,再根据mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)的状态值,决定是显示导航栏,还是隐藏导航栏。
通过这样一系列的步骤,就实现了长按当前界面空白区域动态控制导航栏显示和隐藏的功能。
图3示出了根据本发明的具体实施方式,隐藏及显示导航栏的方法流程:
S301、开始;根据本发明的一个优选实施方式,由于导航栏是系统级的应用systemUI(一个系统应用程序)中的重要窗口,只能通过更改系统源码才能实现;在长按当前应用的空白区域实现对导航栏的控制时,如果当前应用没有注册对空白区域的长按事件的监听处理,那导航栏在显示状态时,长按一次会将其隐藏;导航栏处于隐藏状态,则长按一次会将其显示出来。
S302、系统开机,进入桌面或某个应用中,导航栏默认为开启状态;手机系统开机后,进入到桌面,然后用户可以选择进入到某个应用中,在程序中可默认设置将导航栏开启,即使上一次关机前将其隐藏了,再次开机时也默认将其开启。
根据本发明的一个优选实施方式,保存上次关机前的状态,如果是隐藏的,开机后继续保持隐藏状态;如果是开启的,则继续保持开启状态。根据本发明的一个优选实施方式,通过在PhoneStatusBar(手机状态栏)模块中的start()方法中调用addNavigationBar()(一个方法名)方式来实现添加导航栏,这样systemUI(一个系统应用程序)应用在启动时就会将导航栏显示出来;如果默认不想让其显示,则可以不调用addNavigationBar()(一个方法名)。
S303、长按当前界面的空白区域,当前界面接收到长按事件;根据本发明的一个优选实施方式,在桌面(桌面也可以看作一个特殊应用)或者某个应用中,长按当前界面的空白区域,当前界面会收到长按事件;按照Android系统的事件分发机制来说,首先应该是当前应用最外层的Activity首先收到触屏按下事件,如果它不做拦截处理,将依次传递到子View(视图)中,如果这个子View(视图)是一个ViewGroup(视图组)类型的,并且它也不做拦截处理,按下事件将继续传递到子View(视图)的子View(视图)中,依次类推,直到某个View(视图)通过OnTouchEvent()(一个方法名)方法响应或者消费了这个事件。如果谁也没有响应,将会回传给最顶层的View(视图),然后将事件抛弃掉。长按事件比较特殊,它是由几个按键组合成的,先是一个ACTION_DOWN(表示按下事件)按下事件,然后是多个ACTION_MOVE(表示移动事件)按键移动事件,最后有一个ACTION_UP(表示抬起事件)按键抬起事件,这几个事件组合而成的,长按事件在基类View(视图)中有一个统一的处理方法performLongClick()(一个方法名),我们可以在这里处理长按事件。
S304、长按事件传递到基类View(视图)中,在基类View(视图)中处理长按事件;长按事件会传递到基类View(视图)中,在基类View(视图)中的performLongClick()(一个方法名)方法中处理长按事件。
S305、判断长按区域是否注册了长按事件监听器;如果判断结果为是,则执行S306;如果判断结果为否,则执行S308;
基类View中的performLongClick()(一个方法名)判断ListenerInfo(存储监听器的类)信息是否为空,如果不为空,并且它的长按事件监听器mOnLongClickListener也不为空,则执行监听器的回调方法onLongClick,来处理长按事件对应的功能。
S306、响应长按事件的监听器,触发回调函数,执行相应的功能;如果注册了监听器,即上一步提到的ListenerInfo(存储监听器的类)信息不为空,并且事件监听器mOnLongClickListener也不为空,则执行监听器的回调方法onLongClick,处理长按事件对应的功能。
S307、本界面消费了长按事件,无法再继续操作导航栏,执行S3013;一旦监听器被触发,它的回调方法会被执行,然后响应对应的功能,此时由于长按事件得到了处理,不应该再继续往下游传递了,所以此界面消费了这个长按事件,不会继续在传递下去执行导航栏的操作。
S308、在基类View的相关方法中处理长按事件;如果应用没有注册长按事件的监听器,如,ListenerInfo(存储监听器的类)信息为空,或者事件监听器mOnLongClickListener为空,则长按事件不会被消费掉,继续往下游传递。
S309、创建一个自定义的广播消息,并将其发送出去;根据本发明的一个优选实施方式,借助Context上下文的sendOrderedBroadcast()方法,发送一个在PhoneStatusBar(手机状态栏)模块中创建的“action_show_or_hide_navigation”(字符串常量,表示一个广播消息)广播消息,表示我们要对导航栏进行操作,执行显示或者隐藏。需要注意的是,根据本发明的一个优选实施方式,应使用sendOrderedBroadcast()方法而不是sendBroadcast()方法,前者表示发送的是有序广播,后者是普通的广播,使用有序广播的好处是,发送的多个广播是按发送的顺序依次到达监听器那里,而不会发生顺序变更,而后者有可能出现顺序错乱的问题。
S3010、systemUI中的PhoneStatusBar模块接收并处理此广播消息;systemUI(一个系统应用程序)是一个系统级别的应用程序,它管理整个系统的UI,包括状态栏,导航栏等,在基类View(视图)中发送的广播会被PhoneStatusBar(手机状态栏)模块接收和处理。因为我们在PhoneStatusBar(手机状态栏)模块中注册了这个广播消息,并且进行监听,一旦有模块发送了这个消息,它就会收到并进行处理。
S3011、进入导航栏的显示和隐藏子流程,处理广播消息,根据当前导航栏状态,决定是显示或隐藏;PhoneStatusBar(手机状态栏)模块收到“action_show_or_hide_navigation”(字符串常量,表示一个广播消息)广播消息后,就会进入到导航栏的显示和隐藏子流程中,具体步骤可以参考图4,进行了详细的介绍,在此流程中,会进行广播消息的注册,监听,处理和记录当前导航栏的状态,并根据状态来控制导航栏的现实或隐藏。
S3012、完成导航栏的显示和隐藏功能;经过导航栏的显示和隐藏子流程处理后,最终完成导航栏的显示和隐藏功能。
S3013、退出;结束长按事件的处理并退出。
为了能够显示和隐藏导航栏,需要修改系统模块PhoneStatusBar(手机状态栏),它对应文件PhoneStatusBar.java(手机状态栏文件对应的java文件),这个文件是系统systemUI(一个系统应用程序)这个系统APP(应用程序)中的一个比较重要的类,它用来管理系统的通知栏,状态栏和导航栏等各种系统级的窗口。
图4示出了通过注册,并监听广播的方式来触发显示或隐藏导航栏功能的方法流程。
S401、系统开机;手机开机,然后初始化各种控件和系统应用。
S402、系统初始化和加载systemUI系统应用程序;
系统进行各个应用和模块的初始化动作,包括初始化和加载systemUI系统应用程序。systemUI(一个系统应用程序)即系统用户界面,是一个系统级别的app(应用程序),包含有状态栏,锁屏,通知栏,导航栏,以及最近任务列表等功能。要对导航栏进行控制,需要修改这个app(应用程序)中的内容。
S403、初始化PhoneStatusBar模块,显示导航栏;
导航栏主要是在模块PhoneStatusBar(手机状态栏)中实现的,所以在初始化systemUI(一个系统应用程序)时,需要同时初始化PhoneStatusBar(手机状态栏)模块,然后才能显示导航栏。在此模块中,有一个定义好的方法为addNavigationBar()(一个方法名),我们可以通过它来显示导航栏。这个方法内部通过调用WindowManager(窗口管理器)的addView(一个方法名)方法实现了将导航栏添加到系统窗口管理器中,这样就可以达到显示导航栏的目的。
S404、初始化导航栏的状态值mIsDisplayNavigation,将其置为true(真);
借助一个布尔值mIsDisplayNavigation来表示导航栏显示的状态,当其为true(真)时表示显示状态;为fasle时表示隐藏状态。在初始化导航栏时我们将其置为true(真),表示默认为显示导航栏。
S405、创建显示和隐藏导航栏;显示导航栏可以借助系统已有的方法addNavigationBar()(一个方法名)来实现,隐藏方法通过自定义的方式实现,根据本发明的一个优选实施方式,定义一个方法removeNavigationBar(),内部通过调用WindowManager(窗口管理器)的removeView(一个方法名)方法来实现隐藏导航栏。这样就可以实现显示和隐藏导航栏。
S406、注册一个广播,利用广播接收器监听对导航栏的操作;
根据本发明的优选实施方式,注册一个消息为“action_show_or_hide_navigation”(字符串常量,表示一个广播消息)的广播接收器BroadcastReceiver,然后在接收器的onReceive()(一个方法名)方法中处理接受到的消息。
S407、进入监听此广播状态;
注册“action_show_or_hide_navigation”(字符串常量,表示一个广播消息)广播消息后,然后对此广播进行监听,只有收到“action_show_or_hide_navigation”(字符串常量,表示一个广播消息)这样的广播消息后,接收器才会被触发。
S408、判断是否接收到操作导航栏的广播;如果判断结果为否,则实行S409;如果判断结果为是,则执行S4010;
判断是否接收到操作导航栏的广播,即是否接收到“action_show_or_hide_navigation”(字符串常量,表示一个广播消息)这个广播消息。
S409、待机运行,继续监听,返回执行S407;
如果未收到“action_show_or_hide_navigation”(字符串常量,表示一个广播消息)广播消息,则继续进行监听,进入到监听广播状态。
S4010、接收到广播消息,根据当前状态操作导航栏:如果收到了此广播消息,然后根据mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)的状态,来决定是显示导航栏,还是隐藏导航栏。
S4011、判断状态标志mIsDisplayNavigation是否为true,如果判断结果为是,则执行S4013,如果判断结果为否,则执行S4012;
通过判断状态标志mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)是否为true(真)来决定下一步的动作。
S4012、当前的导航栏为隐藏状态调用显示方法addNavigationBar(),显示导航栏,并且将标志mIsDisplayNavigation置为true;
如果mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)不为true(真),表示当前的导航栏为隐藏状态,则调用显示方法,显示导航栏,并且将标志mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)置为true(真)。
S4013、当前的导航栏为显示状态,则调用隐藏方法removeNavigationBar(),隐藏导航栏,并且将标志mIsDisplayNavigation置为false,继续执行S4014;
如果mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)为true(真),表示当前的导航栏为显示状态,则调用隐藏方法,隐藏导航栏,并且将标志mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)置为false(假)。
S4014、完成本次操作,继续等待接收广播;
显示或者隐藏导航栏后,表示当前这次长按事件得到了响应,程序继续进入到监听状态,等待下一次的长按处理。
以上通过注册,并监听广播的方式来触发显示或隐藏导航栏功能具体流程。
图5示出了根据本发明的一个具体实施方式的,通过长按应用空白区域来触发显示或隐藏导航栏的方法流程。
S501、开始:用户开始操作当前应用。
S502、长按当前界面的空白区域,触发长按事件;长按当前应用界面的空白区域,将触发空白区域的长按事件处理流程。
S503、进入到基类View中的performLongClick()(一个方法名)方法中进行长按事件的处理;对于长按事件一般都是在基类View(视图)中的performLongClick()(一个方法名)方法中进行处理的。
S504、判断当前应用是否注册了此区域的长按事件监听器;如果判断结果为是,则执行S505;如果判断结果为否,则执行S507;
在基类View(视图)中的performLongClick()(一个方法名)方法中,通过判断ListenerInfo(存储监听器的类)信息是否为空,以及它的长按事件监听器mOnLongClickListener是否为空来表示是否注册了此区域的长按事件监听器。
S505、执行长按事件的回调函数,触发对应的功能;继续执行S506;ListenerInfo(存储监听器的类)信息不为空,并且它的长按事件监听器mOnLongClickListener也不为空,则执行事件监听器mOnLongClickListener的回调方法onLongClick,来处理长按事件对应的功能。
S506、将长按事件消费掉了,不再执行操作导航栏的操作;继续执行S5010;当执行了监听器的回调方法onLongClick()后,表示此长按事件被消费掉了,不应该再将长按事件往下游传递,因此也就不能再执行操作导航栏的操作了。
S507、创建一个操作导航栏的广播消息,并将其发送出去,消费掉长按事件;我们借助Context上下文的sendOrderedBroadcast()方法,发送一个“action_show_or_hide_navigation”(字符串常量,表示一个广播消息)这样的广播消息,这个消息是在PhoneStatusBar(手机状态栏)模块中创建的,并且已经在此模块中进行了监听,如果有模块发送此广播,它将接收到。发送此广播后,表示我们对长按事件进行了处理,消费掉了此事件,可以不用继续往下传播了。
S508、systemUI中的PhoneStatusBar模块接收到此广播消息后,根据导航栏当前状态决定显示或隐藏;
systemUI(一个系统应用程序)中的PhoneStatusBar(手机状态栏)模块已经注册并监听“action_show_or_hide_navigation”(字符串常量,表示一个广播消息)这个消息,如果接收到此广播消息后,会根据mIsDisplayNavigation(布尔型变量,记录导航栏的显示状态)的状态决定对导航栏进行显示或隐藏。
S509、完成此次长按事件的处理;
在PhoneStatusBar(手机状态栏)收到广播消息后,导航栏进行显示或隐藏,表示此次长按事件得到了处理。
S5010、结束;用户完成对当前应用长按事件的处理,可能会产生两个后果中的一个,一是调用执行应用程序之前注册的长按事件监听器对应的功能,比如,弹出上下文菜单;二是显示或者隐藏导航栏。
针对没有实体键的智能手机用户,很多情况下希望显示导航栏,从而可以使用系统的虚拟按键,或者想要关闭虚拟按键所在的导航栏,从而节省屏幕空间,本发明设计和实现了一种解决的方法。
首先,通过长按当前界面的空白区域来触发导航栏的显示和隐藏,不会和系统其它控件的长按事件产生冲突,因为只有在其它控件不处理长按事件的情况下,我们才会处理这个长按事件进行状态栏的显示或隐藏。另外,选择长按而不是单击,或双击,是因为这两个事件使用比较频繁,如果用他们替换长按产生的冲突会比较多,所以选择长按,冲突会很少;
其次,使用长按空白区域,可以起到快速响应操作的目的,避免现有的通过菜单开闭的方法来控制导航栏的显示和隐藏,会显得简单快捷和高效,能够节省用户的时间和操作。
本方案中通过发送广播的方式实现动态控制导航栏显示或者隐藏,还可以通过系统的进程间通信机制来实现动态控制导航栏显示或者隐藏。
长按当前界面的空白区域,除了使用基类View(视图)中的相关方法来实现外,还可以通过修改所有活动视图的基类Activity和Fragment来实现。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。
Claims (10)
1.一种控制智能终端导航栏隐藏及显示的方法,包含如下步骤:
S301、开始;
S302、系统开机,进入桌面或某个应用中,导航栏默认为开启状态;
S303、长按当前界面的空白区域,当前界面接收到长按事件;
S304、长按事件传递到基类视图中,在基类视图中处理长按事件;
S305、判断长按区域是否注册了长按事件监听器;如果判断结果为是,则执行S306;如果判断结果为否,则执行S308;
S306、响应长按事件的监听器,触发回调函数,执行相应的功能;
S307、本界面消费了长按事件,无法再继续操作导航栏,执行S3013;
S308、在基类View的相关方法中处理长按事件;
S309、创建一个自定义的广播消息,并将其发送出去;
S3010、systemUI中的PhoneStatusBar模块接收并处理此广播消息;
S3011、进入导航栏的显示和隐藏子流程,处理广播消息,根据当前导航栏状态,决定是显示或隐藏;
S3012、完成导航栏的显示和隐藏功能;
S3013、结束长按事件的处理并退出。
2.根据权利要求1所述的控制智能终端导航栏隐藏及显示的方法,其特征在于:
通过在PhoneStatusBar模块中的start()方法中调用addNavigationBar()方式来实现添加导航栏。
3.根据权利要求1或2所述的控制智能终端导航栏隐藏及显示的方法,其特征在于:
在基类视图中的performLongClick()方法中处理长按事件。
4.根据权利要求1-3任一所述的控制智能终端导航栏隐藏及显示的方法,其特征在于:
基类View中的performLongClick()判断存储监听器的类信息ListenerInfo是否为空,如果不为空,并且它的长按事件监听器mOnLongClickListener也不为空,则执行监听器的回调方法onLongClick,来处理长按事件对应的功能。
5.根据权利要求1-4任一所述的控制智能终端导航栏隐藏及显示的方法,其特征在于:
如果注册了监听器,存储监听器的类信息ListenerInfo不为空,且事件监听器mOnLongClickListener也不为空,则执行监听器的回调方法onLongClick,处理长按事件对应的功能。
6.根据权利要求1-5任一所述的控制智能终端导航栏隐藏及显示的方法,其特征在于:
如果应用没有注册长按事件的监听器,如果存储监听器的类信息ListenerInfo为空,或者事件监听器mOnLongClickListener为空,则长按事件不会被消费掉,继续往下游传递。
7.根据权利要求1-6任一所述的控制智能终端导航栏隐藏及显示的方法,其特征在于:
借助Context上下文的sendOrderedBroadcast()方法,发送一个在手机状态栏模块PhoneStatusBar中创建的“action_show_or_hide_navigation”广播消息,表示要对导航栏进行操作,执行显示或者隐藏。
8.根据权利要求1-7任一所述的控制智能终端导航栏隐藏及显示的方法,其中通过注册,并监听广播的方式来触发显示或隐藏导航栏功能的具体流程如下:
S401、系统开机;
S402、系统初始化和加载systemUI系统应用程序;
S403、初始化PhoneStatusBar模块,显示导航栏;
S404、初始化导航栏的状态值mIsDisplayNavigation,将其置为真(true);
S405、创建显示和隐藏导航栏;
S406、注册一个广播,利用广播接收器监听对导航栏的操作;
S407、进入监听此广播状态;
S408、判断是否接收到操作导航栏的广播;如果判断结果为否,则实行S409;如果判断结果为是,则执行S4010;
S409、待机运行,继续监听,返回执行S407;
S4010、接收到广播消息,根据当前状态操作导航栏;如果收到了此广播消息,然后根据mIsDisplayNavigation的状态,来决定是显示导航栏,还是隐藏导航栏;
S4011、判断状态标志mIsDisplayNavigation是否为true,如果判断结果为是,则执行S4013,如果判断结果为否,则执行S4012;
S4012、当前的导航栏为隐藏状态,调用显示方法addNavigationBar(),显示导航栏,并且将标志mIsDisplayNavigation置为true;
S4013、当前的导航栏为显示状态,则调用隐藏方法removeNavigationBar(),隐藏导航栏,并且将标志mIsDisplayNavigation置为false,继续执行S4014;
S4014、完成本次操作,继续等待接收广播。
9.根据权利要求8所述的控制智能终端导航栏隐藏及显示的方法,其特征在于:
用布尔值mIsDisplayNavigation来表示导航栏显示的状态,当其为true时表示显示状态;为fasle时表示隐藏状态。在初始化导航栏时我们将其置为true,表示默认为显示导航栏。
10.根据权利要求8或9所述的控制智能终端导航栏隐藏及显示的方法,其特征在于:
显示导航栏借助系统addNavigationBar()来实现,隐藏方法通过定义removeNavigationBar(),内部通过调用窗口管理器WindowManager的removeView来实现隐藏导航栏。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810128986.9A CN108279827B (zh) | 2018-02-08 | 2018-02-08 | 一种控制智能终端导航栏隐藏及显示的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810128986.9A CN108279827B (zh) | 2018-02-08 | 2018-02-08 | 一种控制智能终端导航栏隐藏及显示的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108279827A true CN108279827A (zh) | 2018-07-13 |
CN108279827B CN108279827B (zh) | 2020-04-10 |
Family
ID=62808056
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810128986.9A Active CN108279827B (zh) | 2018-02-08 | 2018-02-08 | 一种控制智能终端导航栏隐藏及显示的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108279827B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109669749A (zh) * | 2018-12-13 | 2019-04-23 | 广州艾美网络科技有限公司 | 一种实现ios系统自定义导航栏的方法 |
CN114253434A (zh) * | 2020-09-25 | 2022-03-29 | 武汉斗鱼鱼乐网络科技有限公司 | 系统交互界面的控制方法、装置、存储介质及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103605456A (zh) * | 2013-11-19 | 2014-02-26 | Tcl集团股份有限公司 | 一种系统栏的隐藏和显示方法及智能终端 |
EP2911045A1 (en) * | 2012-10-16 | 2015-08-26 | ZTE Corporation | Method and device for controlling switching of virtual navigation bar |
CN105487868A (zh) * | 2015-11-30 | 2016-04-13 | 上海斐讯数据通信技术有限公司 | 实现安卓设备虚拟按键隐藏和显示的方法和系统 |
CN105511746A (zh) * | 2014-09-24 | 2016-04-20 | 深圳富泰宏精密工业有限公司 | 导航栏优化系统及方法 |
CN106980445A (zh) * | 2017-03-27 | 2017-07-25 | 北京小米移动软件有限公司 | 操控菜单的唤起方法及装置、电子设备 |
-
2018
- 2018-02-08 CN CN201810128986.9A patent/CN108279827B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2911045A1 (en) * | 2012-10-16 | 2015-08-26 | ZTE Corporation | Method and device for controlling switching of virtual navigation bar |
CN103605456A (zh) * | 2013-11-19 | 2014-02-26 | Tcl集团股份有限公司 | 一种系统栏的隐藏和显示方法及智能终端 |
CN105511746A (zh) * | 2014-09-24 | 2016-04-20 | 深圳富泰宏精密工业有限公司 | 导航栏优化系统及方法 |
CN105487868A (zh) * | 2015-11-30 | 2016-04-13 | 上海斐讯数据通信技术有限公司 | 实现安卓设备虚拟按键隐藏和显示的方法和系统 |
CN106980445A (zh) * | 2017-03-27 | 2017-07-25 | 北京小米移动软件有限公司 | 操控菜单的唤起方法及装置、电子设备 |
Non-Patent Citations (2)
Title |
---|
HDWSLSS: "Android4.2.2 动态显示隐藏屏幕底部的导航栏(对系统源码进行修改)", 《CSDN》 * |
李跃东: "android导航栏隐藏与浮现", 《CSDN》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109669749A (zh) * | 2018-12-13 | 2019-04-23 | 广州艾美网络科技有限公司 | 一种实现ios系统自定义导航栏的方法 |
CN114253434A (zh) * | 2020-09-25 | 2022-03-29 | 武汉斗鱼鱼乐网络科技有限公司 | 系统交互界面的控制方法、装置、存储介质及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN108279827B (zh) | 2020-04-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7138804B2 (ja) | インタフェース表示方法及びその装置、端末並びにコンピュータプログラム | |
JP6710278B2 (ja) | 通知メッセージ管理方法および端末 | |
CN104199734B (zh) | 一种基于安卓智能终端的应用程序多开管理方法和系统 | |
US8208907B2 (en) | Free busy calendar interface | |
US7801567B2 (en) | Method for providing alerts in a mobile device and mobile device therefor | |
KR101907182B1 (ko) | 애플리케이션 프로그램 제어 방법 및 관련 장치 | |
KR101547953B1 (ko) | 그래픽 오브젝트 배치 편의를 위한 스마트 기기 및 그래픽 오브젝트 배치 방법 | |
US20120173682A1 (en) | Dynamic device configuration using predicates | |
EP2228975A1 (en) | System and method for accessing internet protocol phone based applications | |
KR20010030831A (ko) | 개인 통신 보조 장치를 이용한 정보 처리 방법 | |
US11489806B2 (en) | Systems and methods for sorting unread messages in a group-based communication platform | |
US10277664B2 (en) | Displaying an application in a window in a graphical user interface environment on a computer system | |
EP1891743A1 (en) | Mobile terminal and method for operation | |
US20180285098A1 (en) | Control method | |
CN111966258A (zh) | 权限设置方法、装置及电子设备 | |
US11079907B1 (en) | Systems and methods for reacting to messages | |
CN107390969B (zh) | 一种控制悬浮窗的方法及终端 | |
CN108304107A (zh) | 一种显示应用图标的方法、终端及计算机可读存储介质 | |
CN108279827A (zh) | 一种控制智能终端导航栏隐藏及显示的方法 | |
CN108566334A (zh) | 基于聊天软件的辅助方法、终端及介质 | |
JP5504168B2 (ja) | 移動体端末の待ち受け画面上の情報領域の表示を制御するための方法および装置 | |
JP7512540B1 (ja) | メッセージ至急方法、装置、システム及び記憶媒体 | |
TWI410858B (zh) | Android行動設備金融看盤軟體之狀態列快捷鍵應用裝置及方法 | |
CN106874085A (zh) | 一种自启应用的管理方法及终端 | |
CN110865850A (zh) | 一种双桌面终端的桌面配置方法及终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |