public final class Display
extends Object
java.lang.Object | |
↳ | android.view.Display |
提供有关逻辑显示的大小和密度的信息。
显示区域有两种不同的描述。
getSize(Point)
, getRectSize(Rect)
and getMetrics(DisplayMetrics)
.getRealSize(Point)
, getRealMetrics(DisplayMetrics)
.逻辑显示器不一定代表特定的物理显示设备,例如内置屏幕或外部显示器。 根据当前连接的设备以及是否启用了镜像,可以在一个或多个物理显示屏上显示逻辑显示内容。
Nested classes |
|
---|---|
class |
Display.HdrCapabilities 封装给定显示器的HDR功能。 |
class |
Display.Mode 给定显示器支持的模式。 |
Constants |
|
---|---|
int |
DEFAULT_DISPLAY 默认显示ID,即内置主显示器的ID(假设有一个)。 |
int |
FLAG_PRESENTATION 显示标志:表示显示是演示显示。 |
int |
FLAG_PRIVATE 显示标志:表示显示器是私人的。 |
int |
FLAG_ROUND 显示标志:表示显示屏呈圆形。 |
int |
FLAG_SECURE 显示标志:表示显示器具有安全视频输出并支持合成安全表面。 |
int |
FLAG_SUPPORTS_PROTECTED_BUFFERS 显示标志:表示显示器支持存储在受保护的图形缓冲区中的合成内容。 |
int |
INVALID_DISPLAY 无效的显示ID。 |
int |
STATE_DOZE 显示状态:显示器在低功耗状态下打盹; 它仍然处于开启状态,但在设备非互动时显示系统提供的内容。 |
int |
STATE_DOZE_SUSPEND 显示状态:显示器处于暂停低功耗状态; 它仍然处于开启状态,但在设备非互动时显示静态系统提供的内容时进行了优化。 |
int |
STATE_OFF 显示状态:显示屏关闭。 |
int |
STATE_ON 显示状态:显示器打开。 |
int |
STATE_UNKNOWN 显示状态:显示状态未知。 |
Public methods |
|
---|---|
long |
getAppVsyncOffsetNanos() 获取应用程序的VSYNC偏移量,以纳秒为单位。 |
void |
getCurrentSizeRange(Point outSmallestSize, Point outLargestSize) 只要屏幕尺寸没有实际变化,就可以返回应用程序在正常操作下可能遇到的显示尺寸范围。 |
int |
getDisplayId() 获取显示ID。 |
int |
getFlags() 返回描述显示功能的标志组合。 |
Display.HdrCapabilities |
getHdrCapabilities() 返回显示器的HDR功能。 |
int |
getHeight() 此方法在API级别13中已弃用。请改为使用 |
void |
getMetrics(DisplayMetrics outMetrics) 获取显示描述此显示的大小和密度的度量。 |
Display.Mode |
getMode() 返回显示的活动模式。 |
String |
getName() 获取显示的名称。 |
int |
getOrientation() 此方法在API级别8中已弃用。请使用 |
int |
getPixelFormat() 此方法在API级别17中已弃用。此方法不再受支持。 结果总是 |
long |
getPresentationDeadlineNanos() 这是提前多久,缓冲区必须在给定时间排队等候呈现。 |
void |
getRealMetrics(DisplayMetrics outMetrics) 根据此显示的实际大小获取显示度量标准。 |
void |
getRealSize(Point outSize) 获取显示的实际大小,而不减去任何窗口装饰或应用任何兼容性比例因子。 |
void |
getRectSize(Rect outSize) 获取显示为矩形的大小(以像素为单位)。 |
float |
getRefreshRate() 以每秒帧数获取此显示的刷新率。 |
int |
getRotation() 从“自然”方向返回屏幕的旋转。 |
void |
getSize(Point outSize) 获取显示的大小,以像素为单位。 |
int |
getState() 获取显示的状态,例如是否打开或关闭。 |
Mode[] |
getSupportedModes() 获取此显示的支持模式。 |
float[] |
getSupportedRefreshRates() 此方法在API级别23中已弃用。 |
int |
getWidth() 此方法在API级别13中已弃用。请改为使用 |
boolean |
isValid() 如果此显示仍然有效,则返回true;如果显示已被移除,则返回false。 |
String |
toString() 返回对象的字符串表示形式。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
int DEFAULT_DISPLAY
默认显示ID,即内置主显示器的ID(假设有一个)。
常量值:0(0x00000000)
int FLAG_PRESENTATION
显示标志:表示显示是演示显示。
此标志标识适合用作演示显示器(如HDMI或无线显示器)的辅助显示器。 应用程序可以自动将其内容投影到演示文稿显示中,以提供更丰富的第二屏体验。
也可以看看:
常量值:8(0x00000008)
int FLAG_PRIVATE
显示标志:表示显示器是私人的。 只有拥有显示器的应用程序才能在其上创建窗口。
也可以看看:
常量值:4(0x00000004)
int FLAG_ROUND
显示标志:表示显示屏呈圆形。
该标志识别圆形,椭圆形或其他方式不允许用户看到显示器的逻辑角落的所有方式。
也可以看看:
常量值:16(0x00000010)
int FLAG_SECURE
显示标志:表示显示器具有安全视频输出并支持合成安全表面。
如果设置了该标志,则显示设备具有安全的视频输出并且能够显示安全的表面。 它也可以显示protected buffers
。
如果此标志未设置,则显示设备可能没有安全的视频输出; 用户可能会在屏幕上看到一个空白区域,而不是安全表面或受保护缓冲区的内容。
安全表面用于防止应用程序出现在屏幕截图中或在非安全显示器上查看呈现到这些表面中的内容。 受保护的缓冲区被安全视频解码器用于类似的目的。
应用程序通过指定FLAG_SECURE
窗口标志来创建具有安全表面的窗口。 同样地,应用程序创建一个SurfaceView
通过调用与安全表面setSecure(boolean)
附连到它的包含窗口的安全视图之前。
应用程序可以使用缺少此标志作为暗示,因为内容可能不可见,因此它不应该在此显示上创建安全曲面或受保护的缓冲区。 例如,如果未设置标志,则应用程序可以选择不在该显示器上显示内容,显示信息错误消息,选择替代内容流或采用不同策略来解码不依赖于安全表面或受保护的内容缓冲区。
也可以看看:
常量值:2(0x00000002)
int FLAG_SUPPORTS_PROTECTED_BUFFERS
显示标志:表示显示器支持存储在受保护的图形缓冲区中的合成内容。
如果设置了此标志,则显示设备支持合成受保护的缓冲区。
如果未设置此标志,则显示设备可能不支持合成受保护的缓冲区; 用户可能会在屏幕上看到空白区域而不是受保护的内容。
安全(DRM)视频解码器可以分配受保护的图形缓冲区来请求在视频解码器和外部显示接收器之间提供硬件保护路径。 如果硬件保护路径不可用,则可能不会合成存储在受保护的图形缓冲区中的内容。
应用程序可以使用缺少此标志作为提示,因为内容可能不可见,因此它不应该使用此显示的受保护缓冲区。 例如,如果未设置标志,则应用程序可以选择不在该显示器上显示内容,显示信息错误消息,选择替代内容流或采用不同的策略来解码不依赖于受保护缓冲区的内容。
也可以看看:
常数值:1(0x00000001)
int STATE_DOZE
显示状态:显示器在低功耗状态下打盹; 它仍然处于开启状态,但在设备非互动时显示系统提供的内容。
也可以看看:
常量值:3(0x00000003)
int STATE_DOZE_SUSPEND
显示状态:显示器处于暂停低功耗状态; 它仍然处于开启状态,但在设备非互动时显示静态系统提供的内容时进行了优化。 通过允许硬件停止应用来自图形子系统的帧缓冲区更新或接管显示器并自主管理以实现低功耗始终显示功能,该模式可用于保存更多的电源。
也可以看看:
常量值:4(0x00000004)
long getAppVsyncOffsetNanos ()
获取应用程序的VSYNC偏移量,以纳秒为单位。 这是一个正值,指示编排者提供的VSYNC事件相对于显示刷新的相位偏移量。 例如,如果Choreographer报告在时间N发生了刷新,则实际发生在(N - appVsyncOffset)。
应用程序通常不需要知道这一点。 它仅用于细粒度的A / V同步。
Returns | |
---|---|
long |
void getCurrentSizeRange (Point outSmallestSize, Point outLargestSize)
只要屏幕尺寸没有实际变化,就可以返回应用程序在正常操作下可能遇到的显示尺寸范围。 这基本上是随着方向改变而看到的尺寸,并考虑到每次旋转中的任何屏幕装饰。 例如,状态栏始终位于屏幕的顶部,因此它会降低横向和纵向的高度,而这里返回的最小高度将是两者中较小的一个。 这是为了让应用程序了解在通过设备旋转时遇到的尺寸范围,以便通过旋转提供稳定的UI。 这里的大小考虑到减小尺寸实际可用的应用程序的所有标准体系装饰品:状态栏,导航栏,系统栏等,并没有考虑到像一个输入法的软键盘帐户更短暂的元素。
Parameters | |
---|---|
outSmallestSize |
Point : Filled in with the smallest width and height that the application will encounter, in pixels (not dp units). The x (width) dimension here directly corresponds to Configuration.smallestScreenWidthDp , except the value here is in raw screen pixels rather than dp units. Your application may of course still get smaller space yet if, for example, a soft keyboard is being displayed. |
outLargestSize |
Point : Filled in with the largest width and height that the application will encounter, in pixels (not dp units). Your application may of course still get larger space than this if, for example, screen decorations like the status bar are being hidden. |
int getDisplayId ()
获取显示ID。
每个逻辑显示都有一个唯一的ID。 默认显示ID为DEFAULT_DISPLAY
。
Returns | |
---|---|
int |
Display.HdrCapabilities getHdrCapabilities ()
返回显示器的HDR功能。
Returns | |
---|---|
Display.HdrCapabilities |
void getMetrics (DisplayMetrics outMetrics)
获取显示描述此显示的大小和密度的度量。 此方法返回的大小不一定代表显示的实际原始大小(原始分辨率)。
1.可以调整返回的尺寸以排除始终可见的某些系统装饰元素。
2.可以缩放以提供与最初为较小显示器设计的旧应用程序的兼容性。
3.根据显示器所属的WindowManager,它可能会有所不同。
- If requested from non-Activity context (e.g. Application context via
(WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE)
)
metrics will report real size of the display based on current rotation.
- If requested from activity resulting metrics will correspond to current window metrics.
In this case the size can be smaller than physical size in multi-window mode.
Parameters | |
---|---|
outMetrics |
DisplayMetrics : A DisplayMetrics object to receive the metrics. |
String getName ()
获取显示的名称。
Note that some displays may be renamed by the user.
Returns | |
---|---|
String |
The display's name. |
int getOrientation ()
此方法在API级别8中已被弃用。
使用getRotation()
Returns | |
---|---|
int |
orientation of this display. |
int getPixelFormat ()
此方法在API级别17中已弃用。
此方法不再受支持。 结果总是RGBA_8888
。
获取显示的像素格式。
Returns | |
---|---|
int |
One of the constants defined in PixelFormat . |
long getPresentationDeadlineNanos ()
这是提前多久,缓冲区必须在给定时间排队等候呈现。 如果您希望在时间N时在屏幕上显示缓冲区,则必须在(N - presentationDeadline)之前提交缓冲区。
GLES渲染所需的演示时间可以使用eglPresentationTimeANDROID(EGLDisplay, EGLSurface, long)
进行设置。 对于视频解码,请使用releaseOutputBuffer(int, long)
。 时间以纳秒表示,使用系统单调时钟( nanoTime()
)。
Returns | |
---|---|
long |
void getRealMetrics (DisplayMetrics outMetrics)
根据此显示的实际大小获取显示度量标准。
尺寸根据显示屏的当前旋转进行调整。
当窗口管理器模拟较小的显示器时(使用adb shell wm size),实际大小可能小于屏幕的物理大小。
Parameters | |
---|---|
outMetrics |
DisplayMetrics : A DisplayMetrics object to receive the metrics. |
void getRealSize (Point outSize)
获取显示的实际大小,而不减去任何窗口装饰或应用任何兼容性比例因子。
尺寸根据显示屏的当前旋转进行调整。
当窗口管理器模拟较小的显示器时(使用adb shell和display-size),实际大小可能小于屏幕的物理大小。
Parameters | |
---|---|
outSize |
Point : Set to the real size of the display. |
void getRectSize (Rect outSize)
获取显示为矩形的大小(以像素为单位)。
Parameters | |
---|---|
outSize |
Rect : A Rect object to receive the size information. |
也可以看看:
int getRotation ()
从“自然”方向返回屏幕的旋转。 返回的值可以是Surface.ROTATION_0
(不旋转), Surface.ROTATION_90
, Surface.ROTATION_180
,或Surface.ROTATION_270
。 例如,如果设备具有自然高大的屏幕,并且用户已将其侧转到横向,则根据其转向的方向,此处返回的值可以是Surface.ROTATION_90
或Surface.ROTATION_270
。 该角度是屏幕上绘制图形的旋转,这与设备的物理旋转方向相反。 例如,如果设备逆时针旋转90度,则补偿渲染将顺时针旋转90度,因此返回值将为Surface.ROTATION_90
。
Returns | |
---|---|
int |
void getSize (Point outSize)
获取显示的大小,以像素为单位。
请注意,此值不应用于计算布局,因为设备通常沿着显示的边缘具有屏幕装饰(例如状态栏),以减少此处返回大小的可用应用程序空间量。 布局应改为使用窗口大小。
尺寸根据显示屏的当前旋转进行调整。
此方法返回的大小不一定代表显示的实际原始大小(原始分辨率)。 可以调整返回的大小以排除始终可见的某些系统装饰元素。 它也可以按比例缩放,以提供与最初为较小显示器设计的旧应用程序的兼容性。
Parameters | |
---|---|
outSize |
Point : A Point object to receive the size information. |
int getState ()
获取显示的状态,例如是否打开或关闭。
Returns | |
---|---|
int |
The state of the display: one of STATE_OFF , STATE_ON , STATE_DOZE , STATE_DOZE_SUSPEND , or STATE_UNKNOWN . |
float[] getSupportedRefreshRates ()
此方法在API级别23中已弃用。
改为使用getSupportedModes()
以每秒帧数获得此显示器支持的刷新率。
此方法仅返回显示器默认模式的刷新率。 有关更多选项,请使用getSupportedModes()
。
Returns | |
---|---|
float[] |
boolean isValid ()
如果此显示仍然有效,则返回true;如果显示已被移除,则返回false。 如果显示无效,那么此类的方法将继续报告最近观察到的显示信息。 但是,在显示器消失后继续使用Display
对象是不明智的(而且毫无结果)。 如果重新连接具有相同ID的显示器,则以前无效的显示可能会再次变为有效。
Returns | |
---|---|
boolean |
True if the display is still valid. |
String toString ()
返回对象的字符串表示形式。 一般来说, toString
方法返回一个“文本表示”这个对象的字符串。 结果应该是一个简洁但内容丰富的表述,对于一个人来说很容易阅读。 建议所有子类重写此方法。
类Object
的toString
方法返回一个字符串,其中包含对象为实例的类的名称,符号字符“ @
”以及对象的哈希代码的无符号十六进制表示形式。 换句话说,这个方法返回一个字符串,其值等于:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Returns | |
---|---|
String |
a string representation of the object. |