是否可以在Android中找到软按钮栏的位置?

时间:2017-09-16 22:44:13

标签: android android-layout android-view android-statusbar

我正在尝试在Android中找到软按钮栏的位置(而不是硬件背面,菜单等按钮,它们会显示在屏幕上)。

我知道如何用像

这样的像素来获得实际的窗口大小
Display d = getWindowManager().getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
DisplayMetrics displayMetrics = new DisplayMetrics();

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

...然后看看"常规"显示指标与" real"显示指标。 因此,我知道软按钮栏位于水平或垂直位置(以及它的像素数),但我不知道它是在左侧还是右侧。

任何想法如何检索?

编辑:代码的上下文位于Activity内(如提问)。

1 个答案:

答案 0 :(得分:2)

系统窗口所在的唯一可靠指标(例如状态栏和导航栏)是通过使用系统窗口插入,如Why would I want to fitsSystemWindows blog post中所述。

在API 21之前,这要求您的Activity的根视图是您已覆盖fitsSystemWindows()的子类 - 传递给您的Rect告诉您哪些方面以及哪些方面状态栏/导航栏的大小(取决于您在活动中设置的标志)。

但是,在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);
      }
    });