Android 屏幕可见高度

在开发 Android 应用程序时,我们经常需要知道屏幕的可见高度来动态调整布局或者适配不同屏幕尺寸。屏幕可见高度指的是屏幕除去状态栏、导航栏等系统UI所占用的空间后,剩余的可见区域高度。

如何获取屏幕可见高度

在 Android 中,我们可以通过DisplayMetrics类来获取屏幕的相关信息,包括屏幕的高度。而要获取屏幕的可见高度,我们需要减去系统UI的高度。

以下是一个获取屏幕可见高度的示例代码:

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int screenHeight = displayMetrics.heightPixels;

Rect rectangle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int visibleScreenHeight = rectangle.height();
int statusBarHeight = getStatusBarHeight();
int navigationBarHeight = getNavigationBarHeight();

int height = screenHeight - statusBarHeight - navigationBarHeight;

在上面的代码中,我们首先通过DisplayMetrics类获取到屏幕的高度screenHeight,然后通过Window类获取到系统UI的高度,包括状态栏和导航栏的高度,并计算出屏幕的可见高度visibleScreenHeight

获取状态栏和导航栏高度

要获取状态栏和导航栏的高度,可以借助以下两个方法:

private int getStatusBarHeight() {
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        return getResources().getDimensionPixelSize(resourceId);
    }
    return 0;
}

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

上述代码中,我们通过getIdentifier方法获取到了状态栏和导航栏的资源id,然后通过getDimensionPixelSize方法获取它们的实际高度。

类图

下面是一个展示屏幕可见高度获取相关类的类图:

classDiagram
    DisplayMetrics <|-- WindowManager
    WindowManager <|-- Activity
    Rect <|-- Window
    Resources <|-- Context

流程图

下面是获取屏幕可见高度的流程图:

flowchart TD
    A[获取屏幕高度] --> B[获取状态栏高度]
    B --> C[获取导航栏高度]
    C --> D[计算屏幕可见高度]

结语

通过上述方式,我们可以轻松地获取到 Android 屏幕的可见高度,从而可以根据这个信息来动态调整布局或者适配不同屏幕尺寸。希望本文对您有所帮助,谢谢阅读!