📜  android 获取屏幕宽度和高度 - Java (1)

📅  最后修改于: 2023-12-03 15:13:21.807000             🧑  作者: Mango

Android 获取屏幕宽度和高度 - Java

在 Android 应用开发中,获取屏幕宽度和高度是一个非常基础的操作,用于适配不同屏幕的布局和样式。

通过 Context 获取屏幕宽度和高度

可以通过 Context 获取屏幕的宽度和高度。其中,Context 可以是 Activity、Fragment、Service 等 Android 类中的子类。

// 获取默认 DisplayMetrics 对象
DisplayMetrics dm = getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels;
int screenHeight = dm.heightPixels;

可以使用 getResources() 方法获取到 Context 的 Resources 对象,然后再通过 getDisplayMetrics() 方法获取默认的 DisplayMetrics 对象。获取到 DisplayMetrics 对象后,可以通过 widthPixelsheightPixels 分别获取屏幕的宽度和高度。

注意:获取到的屏幕宽度和高度不包括导航栏和状态栏的高度。

通过 Window 获取屏幕宽度和高度

可以通过 Window 获取屏幕的宽度和高度。其中,Window 可以是 Activity 的 Window 对象。

// 获取当前 activity 的 window
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int screenWidth = size.x;
int screenHeight = size.y;

可以使用 getWindowManager() 方法获取到 WindowManager 对象,然后再通过 getDefaultDisplay() 方法获取到 Display 对象。获取到 Display 对象后,可以通过 getSize() 方法获取 Point 对象,然后可以通过 Point 对象的 xy 属性获取到屏幕的宽度和高度。

注意:获取到的屏幕宽度和高度不包括导航栏和状态栏的高度。

获取导航栏和状态栏的高度

获取导航栏和状态栏的高度必须使用 Window 对象。

获取状态栏高度:

Rect rect = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rect);
int statusBarHeight = rect.top;

使用 getWindow() 方法获取 Window 对象,在 Window 对象中通过 getDecorView() 方法获取到 DecorView 对象。再通过 DecorView 对象中的 getWindowVisibleDisplayFrame() 方法获取 Rect 对象,最后通过 Rect 对象的 top 属性获取状态栏的高度。

获取导航栏高度:

Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
int navigationBarHeight = 0;
if (resourceId > 0) {
    navigationBarHeight = resources.getDimensionPixelSize(resourceId);
}

通过 getResources() 方法获取到 Context 的 Resources 对象,然后通过 getIdentifier() 方法获取到资源的 ID,最后通过 Resources 对象的 getDimensionPixelSize() 方法获取到导航栏的高度。

注意:导航栏的高度在不同手机上可能不同,甚至可能没有导航栏。

总结

通过上述方法,可以获取到 Android 设备的屏幕宽度和高度,以及状态栏和导航栏的高度信息。在开发中,可以使用该信息适配不同的屏幕和布局,提升应用的用户体验。