CN108958873B - 状态栏沉浸式效果的配置方法、装置、介质和计算机设备 - Google Patents

状态栏沉浸式效果的配置方法、装置、介质和计算机设备 Download PDF

Info

Publication number
CN108958873B
CN108958873B CN201810758826.2A CN201810758826A CN108958873B CN 108958873 B CN108958873 B CN 108958873B CN 201810758826 A CN201810758826 A CN 201810758826A CN 108958873 B CN108958873 B CN 108958873B
Authority
CN
China
Prior art keywords
immersive
activity
status bar
configuring
processing
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.)
Active
Application number
CN201810758826.2A
Other languages
English (en)
Other versions
CN108958873A (zh
Inventor
张嘉俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Alibaba China Co Ltd
Original Assignee
Alibaba China Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba China Co Ltd filed Critical Alibaba China Co Ltd
Priority to CN201810758826.2A priority Critical patent/CN108958873B/zh
Publication of CN108958873A publication Critical patent/CN108958873A/zh
Application granted granted Critical
Publication of CN108958873B publication Critical patent/CN108958873B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/38Creation or generation of source code for implementing user interfaces

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

本发明提供了一种状态栏沉浸式效果的配置方法、装置、计算机存储介质和计算机设备。该方法包括步骤:接收Activity的创建指令,响应于所述创建指令创建Activity;通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码;根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果。本发明实施例通过反射机制获取沉浸式处理代码,无需使用方实现任何接口,就能使应用程序的页面在显示时呈现状态栏沉浸式效果。

Description

状态栏沉浸式效果的配置方法、装置、介质和计算机设备
技术领域
本发明涉及安卓领域,具体而言,本发明涉及一种状态栏沉浸式效果的配置方法、装置、计算机存储介质和计算机设备。
背景技术
安卓操作系统默认的状态栏的背景颜色是黑色,在安卓操作系统4.4版本之前,安卓操作系统不支持对状态栏进行设置,因此所有应用的状态栏的背景颜色都是默认的黑色,而一块黑色的状态栏和应用非常不搭调。为了提供更好的显示效果,谷歌公司在安卓操作系统4.4版本开始为应用开发者提供了设置沉浸式状态栏的方法。
然而谷歌公司(Google)在安卓操作系统4.4版本之后推出的更高级别版本中对设置沉浸式状态栏的方法进行了一些修改,使得在不同的系统版本中为状态栏设置沉浸式效果需要使用不同的方法,这增加了实现状态栏沉浸式效果的复杂度。因此,如何方便地为状态栏配置沉浸式效果成了亟需解决的问题。
发明内容
本发明针对现有技术的缺点,提供了一种状态栏沉浸式效果的配置方法、装置、计算机存储介质和计算机设备,本发明实施例的状态栏沉浸式效果的配置方法,通过反射机制获取沉浸式处理代码,无需使用方实现任何接口,就能方便地实现状态栏沉浸式效果。
本发明实施例根据第一方面提供的一种状态栏沉浸式效果的配置方法,包括以下步骤:
接收Activity的创建指令,响应于所述创建指令创建Activity;
通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码;
根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果。
进一步地,所述通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码,之前包括:
接收代理类创建指令;
响应于所述代理类创建指令,依据Activity类创建用于代理Activity生命周期的Instrumentation代理类;
接收方法重写指令,所述方法重写指令中包括所述用于配置状态栏沉浸式效果的沉浸式处理代码;
响应于所述方法重写指令,根据所述沉浸式处理代码重写所述Instrumentation代理类的CallActivityOnCreate成员方法。
进一步地,所述通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码;根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果,包括:
通过反射机制获取所述Instrumentation代理类的CallActivityOnCreate成员方法;
执行所述CallActivityOnCreate成员方法中的沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果。
进一步地,所述根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果,包括:
获取当前系统的系统信息;
根据所述系统信息确定对所述创建的Activity的处理逻辑;
执行所述处理逻辑为所述创建的Activity配置状态栏沉浸式效果。
进一步地,所述执行所述处理逻辑为所述创建的Activity配置状态栏沉浸式效果,包括:
获取与所述系统信息对应的沉浸式参数;
为所述创建的Activity配置所述沉浸式参数,以实现状态栏沉浸式效果。
进一步地,所述获取与所述系统信息对应的沉浸式参数,包括:
利用反射机制获取预先设置在Activity类上的注解内容;
从所述注解内容中确定与所述系统信息对应的沉浸式参数。
进一步地,所述系统信息包括API级别信息;
所述根据所述系统信息确定对所述创建的Activity的处理逻辑,包括:
若所述API级别处于第一阈值区间内,则对所述创建的Activity的状态栏进行第一类透明化处理;
若所述API级别处于第二阈值区间内,则对所述创建的Activity的状态栏进行第二类透明化处理。
进一步地,所述系统信息还包括用于确定当前系统类型的厂商信息;
所述根据所述系统信息确定对所述创建的Activity的处理逻辑,包括:
根据所述厂商信息确定当前系统的系统类型;
若所述API级别处于第三阈值区间内,则对所述创建的Activity的状态栏进行第二类透明化处理,以及对所述创建的Activity的状态栏进行与所述系统类型对应的图标颜色调整处理。
进一步地,所述对所述创建的Activity的状态栏进行与所述系统类型对应的图标颜色调整处理,包括:
若当前系统是MIUI系统,则通过反射机制调用MIUI系统的android.view.MiuiWindowManager$LayoutParams方法,获取其EXTRA_FLAG_STATUS_BAR_DARK_MODE的值,将所述EXTRA_FLAG_STATUS_BAR_DARK_MODE设置到window的setExtraFlags方法中,以进行图标颜色调整处理;
若当前系统是Flyme系统,则通过反射机制调用Flyme系统的android.view.WindowManager$LayoutParams方法,获取其MEIZU_FLAG_DARK_STATUS_BAR_ICON的值和当前内部meizuFlags的值,将所述MEIZU_FLAG_DARK_STATUS_BAR_ICON的值设置到meizuFlags中以生成新的meizuFlags,将所述新的meizuFlags的值重新设置到WindowManager.LayoutParams方法中,以进行图标颜色调整处理;
若当前系统是ColorOS系统,通过反射机制调用ColorOS系统的com.color.view.ColorStatusbarTintUtil方法,获取其SYSTEM_UI_FLAG_OP_STATUS_BAR_TINT的值,将所述SYSTEM_UI_FLAG_OP_STATUS_BAR_TINT的值设置到window.getDecorView().getSystemUiVisibility()方法中,以进行图标颜色调整处理;
若当前系统是EUI系统,则通过反射机制调用系统的android.view.Window对象的setStatusBarIconColor方法,进行图标颜色调整处理。
本发明实施例根据第二方面提供的一种状态栏沉浸式效果的配置装置,包括:
Activity创建模块,用于接收Activity的创建指令,响应于所述创建指令创建Activity;
代码获取模块,用于通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码;
效果配置模块,用于根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果。
本发明实施例根据第三方面提供的一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的状态栏沉浸式效果的配置方法。
本发明实施例根据第四方面提供的一种计算机设备,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上所述的状态栏沉浸式效果的配置方法。
在本发明实施例中,当接收Activity的创建指令时,响应于所述创建指令创建Activity;通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码;根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果,无需使用方实现任何接口,就能使应用程序的页面在显示时呈现状态栏沉浸式效果。另一方面,预先依据Activity类设置Instrumentation代理类,能够实现自动化地在任意Activity中注入沉浸式处理代码;而通过注解的方式来获取沉浸式参数,能够进一步提高设置沉浸式参数的便捷性。此外,针对热门厂商的机型做了定制化处理,保证在热门厂商的机型也能够实现状态栏沉浸式效果。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明一个实施例的状态栏沉浸式效果的配置方法的流程示意图;
图2为本发明一个实施例的状态栏沉浸式效果的配置装置的结构示意图;
图3为本发明一个实施例的计算机设备的结构示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
为了更好地理解本发明的技术方案,以下对部分专业词汇进行说明:
Activity:是Android(安卓操作系统)的四大组件之一,是用户操作的可视化界面;它能为用户提供了一个完成操作指令的窗口。用户在屏幕上看到的页面就是一个Activity,一个安卓的应用程序可以看作由多个松散联系的页面组成。
代码注入:指将实现一定功能的代码段注入到应用程序代码中,以增加原有应用程序能够实现的功能,实现代码注入实质上是在应用程序运行的过程中,动态地将代码段插入到预设位置的过程。
API级别:不同的移动终端操作系统版本对应不同的API级别,在安卓操作系统中,Android4.4对应的API级别为19,Android4.4W对应的API级别为20,Android5.0对应的API级别为21,Android5.1对应的API级别为22,Android6.0对应的API级别为23,Android7.0对应的API级别为24。
反射机制:指java反射机制,在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
以下结合附图对本发明的具体实施方式进行详细介绍。
如图1所示,在一个实施例中提供了一种状态栏沉浸式效果的配置方法,包括以下步骤:
S110:接收Activity的创建指令,响应于所述创建指令创建Activity。
S120:通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码。
在此需要了解的是,Activity的生命周期,即Activity从开始创建到最终销毁所经历的各个状态。一个最简单的完整的Activity生命周期中,安卓系统会按照如下顺序回调以下的回调方法:onCreate->onStart->onResume->onPause->onStop->onDestroy。
其中,安卓系统会在Activity创建后,回调所述onCreate方法,来对Activity进行一些初始化工作,包括布局资源等。而状态栏的初始化工作就是通过所述onCreate方法来完成的。本发明实施例是应用在安卓系统调用onCreate方法之前。
具体地,步骤S120:通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码,之前包括:
S210:接收代理类创建指令。
S220:响应于所述代理类创建指令,依据Activity类创建用于代理Activity生命周期的Instrumentation代理类。
安卓系统中使用了沙箱机制,普通用户程序的进程空间都是独立的,程序的运行互不干扰。而安卓系统提供了一些控制方法(钩子,hook)用于在正常的生命周期(正常是由操作系统控制的)之外控制安卓控件的运行。而Instrumentation类是安卓系统里面的一套控制方法。
S230:接收方法重写指令,所述方法重写指令中包括所述用于配置状态栏沉浸式效果的沉浸式处理代码。
S240:响应于所述方法重写指令,根据所述沉浸式处理代码重写所述Instrumentation代理类的CallActivityOnCreate成员方法。
需要说明的是,Instrumentation代理类能够代理任意Activity的生命周期,即实现一个Instrumentation代理类就能完成对任意Activity注入沉浸式处理代码。
S130:根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果。
所述通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码;根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果,具体包括:
通过反射机制获取所述Instrumentation代理类的CallActivityOnCreate成员方法;
执行所述CallActivityOnCreate成员方法中的沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果。
具体地,安卓系统在调用onCreate方法之前,先调用所述CallActivityOnCreate成员方法。而安卓系统通过执行所述CallActivityOnCreate成员方法中的沉浸式处理代码,就能够为所述创建的Activity配置状态栏沉浸式效果。
在一个实施例中,所述根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果,包括以下步骤:
获取当前系统的系统信息;
根据所述系统信息确定对所述创建的Activity的处理逻辑;
执行所述处理逻辑为所述创建的Activity配置状态栏沉浸式效果。
具体地,由于不同的安卓系统版本提供的用于配置状态栏沉浸式效果的处理方法不相同,并且不同安卓系统版本提供的处理方式在其他版本中不适用。因此,为了能够成功配置状态栏沉浸式效果,需要先判断当前系统的版本,再根据判断结果选择相应的处理逻辑。
在一个实施例中,所述执行所述处理逻辑为所述创建的Activity配置状态栏沉浸式效果,包括:
获取与所述系统信息对应的沉浸式参数;
为所述创建的Activity配置所述沉浸式参数,以实现状态栏沉浸式效果。
在安卓系统4.4版本及以上版本中,其提供了为状态栏配置沉浸式效果的方式是,为Activity配置相应的沉浸式参数。
优选地,所述获取与所述系统信息对应的沉浸式参数,包括:
利用反射机制获取预先设置在Activity类上的注解内容;
从所述注解内容中确定与所述系统信息对应的沉浸式参数。
其中,注解(Annotation)是JDK(Java语言的软件开发工具包)5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。
利用安卓系统提供的注解功能,能够更方便地配置沉浸式参数。
具体使用时,开发者需要预先编写好相应的注解,并在Activity类或者Fragment类上添加对应的注解,当应用程序运行时,安卓系统自动通过反射机制来获取注解中的注解内容。
在另一个实施例中,所述系统信息包括API级别信息;
所述根据所述系统信息确定对所述创建的Activity的处理逻辑,包括:
S410:若所述API级别处于第一阈值区间内,则对所述创建的Activity的状态栏进行第一类透明化处理;
具体地,所述第一阈值区间为19-20,也就是说当前系统是4.4版本(Android 4.4)或者4.4W版本(Android 4.4W)。
所述第一类透明化处理包括:将Activity对应的Window设置如下透明化参数:WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS。
在4.4版本或者4.4W中,安卓系统提供了WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS透明化参数(flag),对Activity对应的Window设置上述透明化参数即可使状态栏呈现透明效果。
在一种实施例中,上述标识的设置方式如下:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSL UCENT_STATUS);
S420:若所述API级别处于第二阈值区间内,则对所述创建的Activity的状态栏进行第二类透明化处理。
所述第二阈值区间为21-22,也就是说当前系统是5.0版本(Android5.0)或者5.1版本(Android 5.1)。在安卓系统5.0版本和5.1版本中,状态栏的沉浸式效果进行了支持,因而配置状态栏沉浸式效果的方式相比安卓系统4.4版本或者4.4W有所改变。
具体地,所述第二类透明化处理包括:
将Activity对应的Window设置如下沉浸式参数:
WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUND S;
通过Window获取decorView对象并通过setSystemUiVisibility方法,设置如下沉浸式参数:
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN、
View.SYSTEM_UI_FLAG_LAYOUT_STABLE。
优选地,所述系统信息还包括用于确定当前系统类型的厂商信息。
在本发明实施例中,有针对部分厂商的系统制定的处理方案。而考虑到现实情况中,部分用户在第三方rom对自己的机型有适配时,会将自己的移动终端的原来的系统刷成第三方rom。因此,不能通过获取移动终端的硬件信息来确认该移动终端所使用的操作系统类型,比如说,一款应用程序原先是为华为手机开发的,与华为rom底层有一些交互,如果将所述华为手机的rom刷成小米rom或者其他第三方rom,程序就有可能会挂掉。因此,为了能够成功使部分厂商的机型能够实现状态栏沉浸式效果,在本发明实施例中,需要判断当前系统的系统类型,根据当前系统的系统类型来选择相应的处理方案。
获取厂商信息的方式有多种。
比如,通过以下代码来获取rom定制商的名称
private string gethandsetinfo()
{
string handsetinfo="\nrom制造商:"+android.os.build.manufacturer;
return handsetinfo;
}
或者可以使用getprop命令,在系统build.prop文件查找是否有对应属性来判断是什么ROM。
所述获取厂商信息的方式是现有技术,在此不再赘述。
在一种实施方式中,所述根据所述系统信息确定对所述创建的Activity的处理逻辑,包括:
根据所述厂商信息确定当前系统的系统类型;
若所述API级别处于第三阈值区间内,则对所述创建的Activity的状态栏进行第二类透明化处理,以及对所述创建的Activity的状态栏进行与所述系统类型对应的图标颜色调整处理。
具体地,所述第三阈值区间为23-24。
在一个实施例中,所述对所述创建的Activity的状态栏进行与所述系统类型对应的图标颜色调整处理,包括:
若当前系统是MIUI系统,则通过反射机制调用MIUI系统的android.view.MiuiWindowManager$LayoutParams方法,获取其EXTRA_FLAG_STATUS_BAR_DARK_MODE的值,将所述EXTRA_FLAG_STATUS_BAR_DARK_MODE设置到window的setExtraFlags方法中,以进行图标颜色调整处理;
若当前系统是Flyme系统,则通过反射机制调用Flyme系统的android.view.WindowManager$LayoutParams方法,获取其MEIZU_FLAG_DARK_STATUS_BAR_ICON的值和当前内部meizuFlags的值,将所述MEIZU_FLAG_DARK_STATUS_BAR_ICON的值设置到meizuFlags中以生成新的meizuFlags,将所述新的meizuFlags的值重新设置到WindowManager.LayoutParams方法中,以进行图标颜色调整处理;
若当前系统是ColorOS系统,通过反射机制调用ColorOS系统的com.color.view.ColorStatusbarTintUtil方法,获取其SYSTEM_UI_FLAG_OP_STATUS_BAR_TINT的值,将所述SYSTEM_UI_FLAG_OP_STATUS_BAR_TINT的值设置到window.getDecorView().getSystemUiVisibility()方法中,以进行图标颜色调整处理;
若当前系统是EUI系统,则通过反射机制调用系统的android.view.Window对象的setStatusBarIconColor方法,进行图标颜色调整处理。
本发明实施例还提供了一种状态栏沉浸式效果的配置装置,包括以下模块:
Activity创建模块110,用于接收Activity的创建指令,响应于所述创建指令创建Activity;
代码获取模块120,用于通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码;
效果配置模块130,用于根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果。
以下结合附图对本发明的具体实施方式进行详细介绍。
如图2所示,在一个实施例中提供了一种状态栏沉浸式效果的配置装置,包括以下步骤:
Activity创建模块110,用于接收Activity的创建指令,响应于所述创建指令创建Activity。
Activity,其是Android(安卓操作系统)的四大组件之一,是用户操作的可视化界面;它能为用户提供了一个完成操作指令的窗口。用户在屏幕上看到的页面就是一个Activity,一个安卓的应用程序可以看作由多个松散联系的页面组成。
代码获取模块120,用于通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码。
在此需要了解的是,Activity的生命周期,即Activity从开始创建到最终销毁所经历的各个状态。一个最简单的完整的Activity生命周期中,安卓系统会按照如下顺序回调以下的回调方法:onCreate->onStart->onResume->onPause->onStop->onDestroy。
其中,安卓系统会在Activity创建后,回调所述onCreate方法,来对Activity进行一些初始化工作,包括布局资源等。而状态栏的初始化工作就是通过所述onCreate方法来完成的。本发明实施例是应用在安卓系统调用onCreate方法之前。
具体地,本发明实施例的状态栏沉浸式效果的配置装置,还包括以下模块:
代理类创建指令接收模块210:用于接收代理类创建指令。
代理类生成模块220:用于响应于所述代理类创建指令,依据Activity类创建用于代理Activity生命周期的Instrumentation代理类。
安卓系统中使用了沙箱机制,普通用户程序的进程空间都是独立的,程序的运行互不干扰。而安卓系统提供了一些控制方法(钩子,hook)用于在正常的生命周期(正常是由操作系统控制的)之外控制安卓控件的运行。而Instrumentation类是安卓系统里面的一套控制方法,该类中提供了多种控制方法,如CallActivityOnCreate。
方法重写指令接收模块230:用于接收方法重写指令,所述方法重写指令中包括所述用于配置状态栏沉浸式效果的沉浸式处理代码。
方法重写模块240:用于响应于所述方法重写指令,根据所述沉浸式处理代码重写所述Instrumentation代理类的CallActivityOnCreate成员方法。
效果配置模块130,用于根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果。
所述代码获取模块120和效果配置模块130,具体包括:
方法获取模块:用于通过反射机制获取所述Instrumentation代理类的CallActivityOnCreate成员方法;
处理代码执行模块,用于执行所述CallActivityOnCreate成员方法中的沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果。
具体地,安卓系统在调用onCreate方法之前,先调用所述CallActivityOnCreate成员方法。而安卓系统通过执行所述CallActivityOnCreate成员方法中的沉浸式处理代码,就能够为所述创建的Activity配置状态栏沉浸式效果。
在一个实施例中,所述效果配置模块130,包括以下子模块:
系统信息获取子模块,用于获取当前系统的系统信息;
处理逻辑确定子模块,用于根据所述系统信息确定对所述创建的Activity的处理逻辑;
处理逻辑执行子模块,用于执行所述处理逻辑为所述创建的Activity配置状态栏沉浸式效果。
具体地,由于不同的安卓系统版本提供的用于配置状态栏沉浸式效果的处理方法不相同,并且不同安卓系统版本提供的处理方式在其他版本中不适用。因此,为了能够成功配置状态栏沉浸式效果,需要先判断当前系统的版本,再根据判断结果选择相应的处理逻辑。
在另一个实施例中,所述处理逻辑执行子模块,包括:
沉浸式参数获取单元,用于获取与所述系统信息对应的沉浸式参数;
沉浸式参数配置单元,用于为所述创建的Activity配置所述沉浸式参数,以实现状态栏沉浸式效果。
在安卓系统4.4版本及以上版本中,其提供了为状态栏配置沉浸式效果的方式是,为Activity配置相应的沉浸式参数。
优选地,所述沉浸式参数获取单元,包括:
注解内容获取子单元,用于利用反射机制获取预先设置在Activity类上的注解内容;
沉浸式参数获取子单元,用于从所述注解内容中确定与所述系统信息对应的沉浸式参数。
其中,注解(Annotation)是JDK(Java语言的软件开发工具包)5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。
利用安卓系统提供的注解功能,能够更方便地配置沉浸式参数。
具体使用时,开发者需要预先编写好相应的注解,并在Activity类或者Fragment类上添加对应的注解,当应用程序运行时,安卓系统自动通过反射机制来获取注解中的注解内容。
在另一个实施例中,所述系统信息包括API级别信息;
所述处理逻辑确定子模块,包括:
第一处理单元:用于当所述API级别处于第一阈值区间内,则对所述创建的Activity的状态栏进行第一类透明化处理;
具体地,所述第一阈值区间为19-20,也就是说当前系统是4.4版本(Android 4.4)或者4.4W版本(Android 4.4W)。
所述第一类透明化处理包括:将Activity对应的Window设置如下透明化参数:WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS。
在4.4版本或者4.4W中,安卓系统提供了WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS透明化参数(flag),对Activity对应的Window设置上述透明化参数即可使状态栏呈现透明效果。
在一种实施例中,上述标识的设置方式如下:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCE NT_STATUS);
第二处理单元:用于当所述API级别处于第二阈值区间内,则对所述创建的Activity的状态栏进行第二类透明化处理。
所述第二阈值区间为21-22,也就是说当前系统是5.0版本(Android5.0)或者5.1版本(Android 5.1)。在安卓系统5.0版本和5.1版本中,状态栏的沉浸式效果进行了支持,因而配置状态栏沉浸式效果的方式相比安卓系统4.4版本或者4.4W有所改变。
具体地,所述第二类透明化处理包括:
将Activity对应的Window设置如下沉浸式参数:
WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS;
通过Window获取decorView对象并通过setSystemUiVisibility方法,设置如下标识:
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN、
View.SYSTEM_UI_FLAG_LAYOUT_STABLE。
在一种优选实施方式中,所述系统信息还包括用于确定当前系统类型的厂商信息;
所述处理逻辑确定子模块,包括:
系统类型确定单元,用于根据所述厂商信息确定当前系统的系统类型;
第三处理单元,用于当所述API级别处于第三阈值区间内,则对所述创建的Activity的状态栏进行第二类透明化处理,以及对所述创建的Activity的状态栏进行与所述系统类型对应的图标颜色调整处理。
具体地,所述第三阈值区间为23-24。
在一个实施例中,所述第三处理单元,包括:
若当前系统是MIUI系统,则通过反射机制调用MIUI系统的android.view.MiuiWindowManager$LayoutParams方法,获取其EXTRA_FLAG_STATUS_BAR_DARK_MODE的值,将所述EXTRA_FLAG_STATUS_BAR_DARK_MODE设置到window的setExtraFlags方法中,以进行图标颜色调整处理;
若当前系统是Flyme系统,则通过反射机制调用Flyme系统的android.view.WindowManager$LayoutParams方法,获取其MEIZU_FLAG_DARK_STATUS_BAR_ICON的值和当前内部meizuFlags的值,将所述MEIZU_FLAG_DARK_STATUS_BAR_ICON的值设置到meizuFlags中以生成新的meizuFlags,将所述新的meizuFlags的值重新设置到WindowManager.LayoutParams方法中,以进行图标颜色调整处理;
若当前系统是ColorOS系统,通过反射机制调用ColorOS系统的com.color.view.ColorStatusbarTintUtil方法,获取其SYSTEM_UI_FLAG_OP_STATUS_BAR_TINT的值,将所述SYSTEM_UI_FLAG_OP_STATUS_BAR_TINT的值设置到window.getDecorView().getSystemUiVisibility()方法中,以进行图标颜色调整处理;
若当前系统是EUI系统,则通过反射机制调用系统的android.view.Window对象的setStatusBarIconColor方法,进行图标颜色调整处理。
需要说明的是,本发明实施例提供的状态栏沉浸式效果的配置装置能够实现上述状态栏沉浸式效果的配置方法实施例所实现的功能,功能的具体实现参照上述状态栏沉浸式效果的配置方法中的描述,在此不再赘述。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述状态栏沉浸式效果的配置方法。其中,所述存储介质包括但不限于任何类型的盘(包括软盘、硬盘、光盘、CD-ROM、和磁光盘)、ROM(Read-Only Memory,只读存储器)、RAM(Random AcceSS Memory,随即存储器)、EPROM(EraSable ProgrammableRead-Only Memory,可擦写可编程只读存储器)、EEPROM(Electrically EraSableProgrammable Read-Only Memory,电可擦可编程只读存储器)、闪存、磁性卡片或光线卡片。也就是,存储介质包括由设备(例如,计算机)以能够读的形式存储或传输信息的任何介质。可以是只读存储器,磁盘或光盘等。
本发明实施例还提供一种计算机设备,所述计算机设备包括:
一个或多个处理器510;
存储装置520,用于存储一个或多个程序500,
当所述一个或多个程序500被所述一个或多个处理器510执行,使得所述一个或多个处理器510实现上述状态栏沉浸式效果的配置方法。
如图3所示为本发明计算机设备的结构示意图,包括处理器510、存储装置520、输入单元530以及显示单元540等器件。本领域技术人员可以理解,图3示出的结构器件并不构成对所有计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件。存储装置520可用于存储应用程序500以及各功能模块,处理器510运行存储在存储装置520的应用程序500,从而执行设备的各种功能应用以及数据处理。存储装置520可以是内存储器或外存储器,或者包括内存储器和外存储器两者。内存储器可以包括只读存储器、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦写可编程ROM(EEPROM)、快闪存储器、或者随机存储器。外存储器可以包括硬盘、软盘、ZIP盘、U盘、磁带等。本发明所公开的存储装置包括但不限于这些类型的存储装置。本发明所公开的存储装置520只作为例子而非作为限定。
输入单元530用于接收信号的输入,以及接收用户输入的选择语音文件等相关请求。输入单元530可包括触控面板以及其它输入设备。触控面板可收集用户在其上或附近的触摸操作(比如用户使用手指、触笔等任何适合的物体或附件在触控面板上或在触控面板附近的操作),并根据预先设定的程序驱动相应的连接装置;其它输入设备可以包括但不限于物理键盘、功能键(比如播放控制按键、开关按键等)、轨迹球、鼠标、操作杆等中的一种或多种。显示单元540可用于显示用户输入的信息或提供给用户的信息以及计算机设备的各种菜单。显示单元540可采用液晶显示器、有机发光二极管等形式。处理器510是计算机设备的控制中心,利用各种接口和线路连接整个电脑的各个部分,通过运行或执行存储在存储装置520内的软件程序和/或模块,以及调用存储在存储装置内的数据,执行各种功能和处理数据。
在一实施方式中,计算机设备包括一个或多个处理器510,以及一个或多个存储装置520,一个或多个应用程序500,其中所述一个或多个应用程序500被存储在存储装置520中并被配置为由所述一个或多个处理器510执行,所述一个或多个应用程序500配置用于执行以上实施例所述的语音发送方法。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
应该理解的是,在本发明各实施例中的各功能单元可集成在一个处理模块中,也可以各个单元单独物理存在,也可以两个或两个以上单元集成于一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种状态栏沉浸式效果的配置方法,其特征在于,包括以下步骤:
接收Activity的创建指令,响应于所述创建指令创建Activity;
接收代理类创建指令;
响应于所述代理类创建指令,依据Activity类创建用于代理Activity生命周期的Instrumentation代理类;
接收方法重写指令,所述方法重写指令中包括所述用于配置状态栏沉浸式效果的沉浸式处理代码;
响应于所述方法重写指令,依据所述沉浸式处理代码重写所述Instrumentation代理类的CallActivityOnCreate成员方法;
通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码;
根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果,包括:
获取当前系统的系统信息;
根据所述系统信息确定对所述创建的Activity的处理逻辑;
执行所述处理逻辑为所述创建的Activity配置状态栏沉浸式效果。
2.如权利要求1所述的状态栏沉浸式效果的配置方法,其特征在于,所述通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码;根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果,包括:
通过反射机制获取所述Instrumentation代理类的CallActivityOnCreate成员方法;
执行所述CallActivityOnCreate成员方法中的沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果。
3.如权利要求1所述的状态栏沉浸式效果的配置方法,其特征在于,所述执行所述处理逻辑为所述创建的Activity配置状态栏沉浸式效果,包括:
获取与所述系统信息对应的沉浸式参数;
为所述创建的Activity配置所述沉浸式参数,以实现状态栏沉浸式效果。
4.如权利要求3所述的状态栏沉浸式效果的配置方法,其特征在于,所述获取与所述系统信息对应的沉浸式参数,包括:
利用反射机制获取预先设置在Activity类上的注解内容;
从所述注解内容中确定与所述系统信息对应的沉浸式参数。
5.如权利要求1所述的状态栏沉浸式效果的配置方法,其特征在于,所述系统信息包括API级别信息;
所述根据所述系统信息确定对所述创建的Activity的处理逻辑,包括:
若所述API级别处于第一阈值区间内,则对所述创建的Activity的状态栏进行第一类透明化处理;
若所述API级别处于第二阈值区间内,则对所述创建的Activity的状态栏进行第二类透明化处理。
6.如权利要求5所述的状态栏沉浸式效果的配置方法,其特征在于,所述系统信息还包括用于确定当前系统类型的厂商信息;
所述根据所述系统信息确定对所述创建的Activity的处理逻辑,包括:
根据所述厂商信息确定当前系统的系统类型;
若所述API级别处于第三阈值区间内,则对所述创建的Activity的状态栏进行第二类透明化处理,以及对所述创建的Activity的状态栏进行与所述系统类型对应的图标颜色调整处理。
7.如权利要求6所述的状态栏沉浸式效果的配置方法,其特征在于,所述对所述创建的Activity的状态栏进行与所述系统类型对应的图标颜色调整处理,包括:
若当前系统是MIUI系统,则通过反射机制调用MIUI系统的android.view.MiuiWindowManager$LayoutParams方法,获取其EXTRA_FLAG_STATUS_BAR_DARK_MODE的值,将所述EXTRA_FLAG_STATUS_BAR_DARK_MODE设置到window的setExtraFlags方法中,以进行图标颜色调整处理;
若当前系统是Flyme系统,则通过反射机制调用Flyme系统的android.view.WindowManager$LayoutParams方法,获取其MEIZU_FLAG_DARK_STATUS_BAR_ICON的值和当前内部meizuFlags的值,将所述MEIZU_FLAG_DARK_STATUS_BAR_ICON的值设置到meizuFlags中以生成新的meizuFlags,将所述新的meizuFlags的值重新设置到WindowManager.LayoutParams方法中,以进行图标颜色调整处理;
若当前系统是ColorOS系统,通过反射机制调用ColorOS系统的com.color.view.ColorStatusbarTintUtil方法,获取其SYSTEM_UI_FLAG_OP_STATUS_BAR_TINT的值,将所述SYSTEM_UI_FLAG_OP_STATUS_BAR_TINT的值设置到window.getDecorView().getSystemUiVisibility()方法中,以进行图标颜色调整处理;
若当前系统是EUI系统,则通过反射机制调用系统的android.view.Window对象的setStatusBarIconColor方法,进行图标颜色调整处理。
8.一种状态栏沉浸式效果的配置装置,其特征在于,包括:
Activity创建模块,用于接收Activity的创建指令,响应于所述创建指令创建Activity;
代理类创建指令接收模块,用于接收代理类创建指令;
代理类生成模块,用于响应于所述代理类创建指令,依据Activity类创建用于代理Activity生命周期的Instrumentation代理类;
方法重写指令接收模块,用于接收方法重写指令,所述方法重写指令中包括所述用于配置状态栏沉浸式效果的沉浸式处理代码;
方法重写模块,用于响应于所述方法重写指令,根据所述沉浸式处理代码重写所述Instrumentation代理类的CallActivityOnCreate成员方法;
代码获取模块,用于通过反射机制获取用于配置状态栏沉浸式效果的沉浸式处理代码;
效果配置模块,用于根据所述沉浸式处理代码为所述创建的Activity配置状态栏沉浸式效果,包括:
获取当前系统的系统信息;
根据所述系统信息确定对所述创建的Activity的处理逻辑;
执行所述处理逻辑为所述创建的Activity配置状态栏沉浸式效果。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7任意一项所述的状态栏沉浸式效果的配置方法。
10.一种计算机设备,其特征在于,所述计算机设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-7任意一项所述的状态栏沉浸式效果的配置方法。
CN201810758826.2A 2018-07-11 2018-07-11 状态栏沉浸式效果的配置方法、装置、介质和计算机设备 Active CN108958873B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810758826.2A CN108958873B (zh) 2018-07-11 2018-07-11 状态栏沉浸式效果的配置方法、装置、介质和计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810758826.2A CN108958873B (zh) 2018-07-11 2018-07-11 状态栏沉浸式效果的配置方法、装置、介质和计算机设备

Publications (2)

Publication Number Publication Date
CN108958873A CN108958873A (zh) 2018-12-07
CN108958873B true CN108958873B (zh) 2021-08-20

Family

ID=64483887

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810758826.2A Active CN108958873B (zh) 2018-07-11 2018-07-11 状态栏沉浸式效果的配置方法、装置、介质和计算机设备

Country Status (1)

Country Link
CN (1) CN108958873B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110618849A (zh) * 2018-12-25 2019-12-27 北京时光荏苒科技有限公司 一种通知栏的设置方法、装置、设备及存储介质
CN110109663B (zh) * 2019-03-28 2024-03-29 武汉斗鱼鱼乐网络科技有限公司 一种设置全屏的方法及相关装置
CN110471737B (zh) * 2019-08-21 2022-08-16 深圳市网心科技有限公司 一种沉浸式状态栏设置方法及相关装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105045641B (zh) * 2015-08-31 2018-09-25 北京金山安全软件有限公司 一种启动组件的界面的方法及装置
CN105867730B (zh) * 2016-03-24 2019-03-01 Oppo广东移动通信有限公司 状态栏的显示方法及装置
CN105893061A (zh) * 2016-06-12 2016-08-24 杭州勒芒科技有限公司 应用程序开发方法及系统

Also Published As

Publication number Publication date
CN108958873A (zh) 2018-12-07

Similar Documents

Publication Publication Date Title
US7577937B2 (en) Methods and systems for generating a configurable user interface
CN102939584B (zh) 列表集成
US7636897B2 (en) System and method for property-based focus navigation in a user interface
CN110020323B (zh) 混合应用的页面切换方法、系统、计算机设备及存储介质
US20100287525A1 (en) Extension through visual reflection
CN108958873B (zh) 状态栏沉浸式效果的配置方法、装置、介质和计算机设备
US8504930B1 (en) User interface substitution
AU2018241159B2 (en) Contextual solicitation in a starter application
US9038019B2 (en) Paige control for enterprise mobile applications
CN109491731B (zh) 一种悬浮按钮的控制方法、装置及存储介质
US7603624B2 (en) System and method for styling content in a graphical user interface control
US9817671B2 (en) Rule-based activation of behaviors in an extensible software application
CN116304442A (zh) 页面代码生成方法、装置、电子设备以及存储介质
CN106126213B (zh) 一种基于IFML的Android开发建模方法
JP4288017B2 (ja) コンピュータ構成のためのテキスト・ファイルを変更する方法及びシステム
WO2016138703A1 (zh) 待机界面处理方法、装置及计算机储存介质
CN114840198B (zh) 函数执行方法、积木块功能重写方法及相关设备
EP3289451A1 (en) Cross-platform command extensibility
Smyth Android Studio 3.0 Development Essentials-Android 8 Edition
US20220245206A1 (en) Process flow builder for user-configurable web component sequences
US11010212B2 (en) System and method for supporting and negotiating multiple API versions across multiple products
CN115390720A (zh) 包括自动文档滚动的机器人过程自动化(rpa)
CN108845791B (zh) 应用程序代码开发处理方法及装置、可读存储介质、终端
US11797638B2 (en) Aggregate component for parallel browser-initiated actions
CN115113874B (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
TA01 Transfer of patent application right

Effective date of registration: 20200422

Address after: 310052 room 508, floor 5, building 4, No. 699, Wangshang Road, Changhe street, Binjiang District, Hangzhou City, Zhejiang Province

Applicant after: Alibaba (China) Co.,Ltd.

Address before: 510640 Guangdong city of Guangzhou province Whampoa Tianhe District Road No. 163 Xiping Yun Lu Yun Ping square B radio tower 15 layer self unit 02

Applicant before: GUANGZHOU UC NETWORK TECHNOLOGY Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant