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

Mac*_*Mac 5 java android android-emulator android-layout

我试图获得在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;
Run Code Online (Sandbox Code Playgroud)

代码:2

Point size = new Point();
WindowManager w = getWindowManager();
w.getDefaultDisplay().getSize(size); 
mWidth = size.x;
mHeight = size.y;
Run Code Online (Sandbox Code Playgroud)

我也尝试过无证方法

代码: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);
Run Code Online (Sandbox Code Playgroud)

但是上面没有一个是在4.2上运行Nexus 7,它总是减去状态栏的高度,我没有达到全高.

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

int statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density);
Run Code Online (Sandbox Code Playgroud)

Rect rectgle= new Rect();
Window window= getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
int StatusBarHeight= rectgle.top;
Run Code Online (Sandbox Code Playgroud)

有没有标准的方法来获得实际的设备屏幕高度和宽度?

chi*_*hip 1

尝试一下 API 17 的最新更改:

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

public void getRealSize (Point outSize)
获取显示器的实际大小,而不减去任何窗口装饰或应用任何兼容性比例因子。

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

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