如何在android中找到正确大小的动作栏,状态栏和导航栏?

时间:2015-10-28 12:31:14

标签: android android-actionbar statusbar navigationbar

Android ActionBar , StatusBar , NavigationBar , Window Size

如图所示,我在返回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()的值为真值

0 个答案:

没有答案