能不能找到Android中软键条的位置?

Is it possible to find the location of the soft button bars in Android?

我试图在 Android 中找到软按钮栏的位置(而不是硬件返回、菜单等按钮,它们显示在屏幕上)。

我知道如何使用

之类的东西获得以像素为单位的实际 window 大小
Display d = getWindowManager().getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
DisplayMetrics displayMetrics = new DisplayMetrics();

d.getRealMetrics(realDisplayMetrics);
d.getMetrics(displayMetrics);

...然后查看 "regular" 显示指标与 "real" 显示指标的比较。 这样我就知道软键条是在水平位置还是垂直位置(多少像素),但不知道是在左边还是右边。

知道如何检索吗?

EDIT:代码的上下文在 Activity 中(按要求)。

系统 windows 所在位置(例如状态栏和导航栏)的唯一可靠指示是通过使用系统 window 插图,如 Why would I want to fitsSystemWindows blog post 中所述.

在 API 21 之前,这要求您的 Activity 的根视图是您覆盖 fitsSystemWindows() 的子类 - Rect 传递给您告诉您状态 bar/navigation 栏在哪一边以及大小是多少(取决于您在 activity 上设置的标志)。

但是,在 API 21+ 上,您可以使用 ViewCompat.setOnApplyWindowInsetsListener:

而无需创建自定义视图来执行此操作
ViewCompat.setOnApplyWindowInsetsListener(yourRootView,
    new OnApplyWindowInsetsListener() {
      @Override
      public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) {
        // Use insets.getSystemWindowInsetBottom(), etc to extract
        // the size and location of the system windows
        return ViewCompat.onApplyWindowInsets(v, insets);
      }
    });