java - 如何获取设备原始宽度和高度或实际屏幕宽度和高度?

标签 java android android-layout android-emulator

我正在尝试获取在 4.2 上运行的 Nexus 7 的实际屏幕宽度和高度。

我正在根据设备宽度和高度进行一些运行时计算,以调整按钮和一些 UI 元素的大小,因此它在所有设备上看起来都合适。我的代码在所有 SDK 4.1 及以下版本中运行良好,但在 4.2 上运行不佳。

我正在使用以下代码获取宽度和高度。

代码:1

DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
mWidth = displaymetrics.widthPixels;
mHeight = displaymetrics.heightPixels;

代码:2

Point size = new Point();
WindowManager w = getWindowManager();
w.getDefaultDisplay().getSize(size); 
mWidth = size.x;
mHeight = size.y;

我也尝试过未记录的方法

代码:3

Display display = getWindowManager().getDefaultDisplay();
Method mGetRawW = Display.class.getMethod("getRawWidth");
Method mGetRawH = Display.class.getMethod("getRawHeight");
mWidth = (Integer) mGetRawW.invoke(display);
mHeight = (Integer) mGetRawH.invoke(display);

但以上都不适用于在 4.2 上运行的 Nexus 7,它总是减去状态栏高度,我没有得到完整的高度。

我使用了一些方法来计算状态 bat 高度但没有得到正确的值,

int statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density);

Rect rectgle= new Rect();
Window window= getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
int StatusBarHeight= rectgle.top;

是否有任何标准方法来获取实际设备屏幕的高度和宽度?

最佳答案

尝试使用 API 17 的最新更改:

http://developer.android.com/reference/android/view/Display.html#getRealSize(android.graphics.Point )

public void getRealSize (Point outSize)
Gets the real size of the display without subtracting any window decor or applying any compatibility scale factors.

如果这不起作用,您可以尝试:

http://developer.android.com/reference/android/view/Display.html#getRealMetrics(android.util.DisplayMetrics )

关于java - 如何获取设备原始宽度和高度或实际屏幕宽度和高度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13453407/

相关文章:

android - 如何在 C++ 中使用 ffmpeg 动态更改视频的音轨?

java - 如何设置弹窗的画面自动适应横屏的长度

java - 如何在Android中添加Fragment

java - 如何利用Spring MVC中的多线程概念进行后续操作

java - 创建一个选定初始元素的表格

java - String 对象上的 "cant find symbol".length

java - HyperJAXB:如何始终使用 @OneToOne 而不是 @ManyToOne

android - 使用 Dagger 和 Kotlin 的新架构

php - 每隔一定时间用从 mysql 检索到的数据刷新 ListView

android - 如何在选项卡式应用程序中替换 LinearLayout 下的 fragment