如图所示,我在返回Action Bar,状态栏,导航栏和窗口大小大小的函数中遇到问题:
我的Android手机有1280 * 720像素分辨率,状态栏的返回值是48px,Action Bar是96px,导航栏是96px,默认显示高度是1184px(我发现除了导航栏高度大小之外还返回分辨率“ 1280-96 = 1184“并且在没有软导航栏的手机中返回分辨率高度) 问题是动作栏和状态栏的总和是96 + 48 = 144 所以我们160-144 = 16px消失了!但我知道状态栏和操作栏的总和必须是160px,这是第一个问题
第二个问题是当我触摸导航栏时没有触摸感(应用程序中没有触摸位置)但是当我触摸应用程序的白色空间(主窗口,不是操作栏或状态栏或导航栏)并拖动我的手指在导航栏上,它有触摸感和手指在导航栏上的返回位置!!!
我使用这些函数来获取数据:
public int getNavigationBarHeight(){
int resourceId = getResources().getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
return getResources().getDimensionPixelSize(resourceId);
}
return 0;
}
public int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}
public Point getDisplaySize() {
Display currentDisplay = getWindowManager().getDefaultDisplay();
Point size = new Point();
currentDisplay.getSize(size);
return size;
}
public boolean hasSoftNavigationBar() {
Context context = getBaseContext();
Resources resources = context.getResources();
int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");
if (Build.FINGERPRINT.startsWith("generic") || (id > 0 && resources.getBoolean(id)) )
return true;
else
return false;
}
注意:我发现getNavigationBarHeight()会返回一些没有软导航栏的手机的值,但是当我确定手机的导航栏带有hasSoftNavigationBar()函数时,获取NavigationBarHeight()的值为真值