能不能找到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);
}
});
我试图在 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);
}
});