获取实际屏幕高度(Android)

16

我想获取运行我的应用程序的设备的实际屏幕高度。为了实现这一目标,我尝试了以下操作:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

int Height = metrics.heightPixels;
TextView HeightView = (TextView) findViewById(R.id.screenHeight);
HeightView.setText("Screen Height: " + Height);

int Width = metrics.widthPixels;
TextView WidthView = (TextView) findViewById(R.id.screenWidth);
WidthView.setText("Screen Width: " + Width);

我使用模拟器运行的设备屏幕宽度为1080像素,高度为1920像素。宽度显示正确(1080像素),但是根据应用程序的信息,高度仅为1776像素。我需要做些什么才能使我的应用程序显示正确的屏幕高度?metrics.heightPixels获取屏幕高度的方式不好吗?

6个回答

44

请查看答案。

如果您的API级别>13,且您在活动中,则尝试此方法。

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

如果您没有在活动中,可以通过WINDOW_SERVICE获取默认的Display:

WindowManager wm = (WindowManager)    context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

getWidth和getHeight在API级别13或更低版本中可用。

更新

对于API 17及更高版本,方法Display.getRealSize()会返回屏幕的完整尺寸,如文档所述

获取显示器的实际大小,而不减去任何窗口装饰或应用任何兼容性缩放因子。

该大小根据显示器的当前旋转进行调整。

当窗口管理器使用adb shell am display-size模拟较小的显示器时,实际大小可能比屏幕的物理大小小。


19
int width=Resources.getSystem().getDisplayMetrics().widthPixels;
int height=Resources.getSystem().getDisplayMetrics().heightPixels;

7

我需要获取实际可用高度,在所有选项中,这是唯一为我工作的东西。

创建一个矩形,并获取其尺寸:

Rect r = new Rect();
activityRootView.getWindowVisibleDisplayFrame(r);
int screenHeight = r.bottom - r.top;

其中activityRootView是您布局的根视图。

如果您需要提取工具栏的高度:

int availableScreenHeight = screenHeight - toolbar.getHeight();

toolbar 是您的工具栏视图。

availableScreenHeight 现在将没有状态栏,没有工具栏,并且没有导航栏(如果设备正在使用它)。


2
你可以使用以下代码:
val display = windowManager.defaultDisplay
val size = Point()
display.getSize(size)
val width: Int = size.x
val height: Int = size.y

1
这就像是被接受的答案一样,为什么要发布一个副本? - cmak
这是用 Kotlin 编写的。 - grrigore

1
你可以尝试这个:

 WindowManager wm = getWindowManager();
 Display d = wm.getDefaultDisplay();
 Point size = new Point();
 d.getSize(size);
 Log.i("LOG", "W=" + size.x + " , H=" + size.y);

0
使用这个库:TorryDo/ScreenEasy。(顺便说一下,我是作者)
ScreenEz.with(context) // call once, see the docs for java support.

val width = ScreenEz.fullWidth
val height = ScreenEz.fullHeight
...

有了这个,你就不必担心处理不同Android版本的废弃代码了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接