这就是我们获取屏幕高度的方式:
getResources().getDisplayMetrics().heightPixels;
我们遇到的问题是,使用Galaxy S8隐藏的导航栏,返回的值是高度减去导航栏大小(即使导航栏被用户隐藏)。我们如何获得完全可用的高度?
示例:屏幕高度为2220像素,但返回的值为2076
答案需要能够在Galaxy S8上工作,无论是否隐藏导航栏以及其他设备
提前非常感谢
答案 0 :(得分:1)
尝试使用它:
Point displaySize = new Point();
activity.getWindowManager().getDefaultDisplay().getRealSize(displaySize);
点是来自android.graphics 包的类。
获取显示的实际大小而不减去任何窗口装饰 或应用任何兼容性比例因子。
根据显示器的当前旋转调整尺寸。
实际尺寸可能小于屏幕的物理尺寸 窗口管理器正在模拟一个较小的显示器(使用adb shell wm 尺寸)。
编辑:
我在LG G4上检查了这段代码并且工作正常:
//get the full height of device
Point displaySize = new Point();
getWindowManager().getDefaultDisplay().getRealSize(displaySize);
Resources resources = getResources();
int navBarId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
int fullHeight = displaySize.y;
//get nav bar size
int navbarSize = resources.getDimensionPixelSize(navBarId);
int availableSize = fullHeight;
//check is navbar is visible
boolean navBarVisible = (getWindow().getDecorView().getSystemUiVisibility() &
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0;
if(navBarVisible){
availableSize -= navbarSize;
}
您也可以使用此代码:
view.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int i) {
Log.d("Nav bar visible : ", String.valueOf((i & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)==0));
}
});
检查导航栏何时隐藏。
答案 1 :(得分:0)
我遇到了同样的问题,可以用装饰视图解决这个问题:
//Get the correct screen size even if the device has a hideable navigation bar (e.g. the Samsung Galaxy S8)
View decorView = getWindow().getDecorView(); //if you use this in a fragment, use getActivity before getWindow()
Rect r = new Rect();
decorView.getWindowVisibleDisplayFrame(r);
int screenHeight = r.bottom; // =2220 on S8 with hidden NavBar and =2076 with enabled NavBar
int screenWidth = r.right; // =1080 on S8