我正在尝试在Android中找到软按钮栏的位置(而不是硬件背面,菜单等按钮,它们会显示在屏幕上)。
我知道如何用像
这样的像素来获得实际的窗口大小Display d = getWindowManager().getDefaultDisplay();
DisplayMetrics realDisplayMetrics = new DisplayMetrics();
DisplayMetrics displayMetrics = new DisplayMetrics();
d.getRealMetrics(realDisplayMetrics);
d.getMetrics(displayMetrics);
...然后看看"常规"显示指标与" real"显示指标。 因此,我知道软按钮栏位于水平或垂直位置(以及它的像素数),但我不知道它是在左侧还是右侧。
任何想法如何检索?
编辑:代码的上下文位于Activity内(如提问)。
答案 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);
}
});