繁体   English   中英

如何在 Xamarin Android 中获取导航栏高度?

[英]How to get Navigation bar Height in Xamarin Android?

如何在 Xamarin Android 中获取顶部导航栏高度? 下面是java代码

public static int getSceenHeight(Activity activity) {
   //obsolete now
    return activity.getWindowManager().getDefaultDisplay().getHeight()+getNavigationBarHeight(activity);
}

 public static int getNavigationBarHeight(Activity activity) {
    if (!isNavigationBarShow(activity)){
        return 0;
    }
    Resources resources = activity.getResources();
    int resourceId = resources.getIdentifier("navigation_bar_height",
            "dimen", "android");
    int height = resources.getDimensionPixelSize(resourceId);
    return height;
}

public static boolean isNavigationBarShow(Activity activity){

        Display display = activity.getWindowManager().getDefaultDisplay();
        Point size = new Point();
        Point realSize = new Point();
        display.getSize(size);
        display.getRealSize(realSize);
        return realSize.y!=size.y;

    }
}

如何在 Xamarin Android 中应用它?

当涉及到 Xamarin/Xamarin.Form 和 Android 时,似乎对所谓的 NavigationBar 存在永​​远持续的混淆。 我真的希望 Xamarin 能够修复这个命名,以便它与 android 保持一致。

无论如何,呼...

int resourceId = resources.GetIdentifier("navigation_bar_height",
            "dimen", "android"); 

...将返回底部 NavigationBar(Android)(作为操作系统一部分的按钮)的值。 从上面的评论中,您似乎正在寻找 Xamarin NavigationBar(包含菜单标题等的顶部(波纹管状态栏))。

请尝试以下操作

var styledAttributes = Context.Theme.ObtainStyledAttributes(new[] { Android.Resource.Attribute.ActionBarSize });
var actionBarSize = (int)styledAttributes.GetDimension(0, 0);
styledAttributes.Recycle();

感谢Fred在此发帖

我不知道你会如何使用它,正如你所说我已经将你上面的方法转换为 C#

public static int getSceenHeight(Activity activity)
{
    //obsolete now
    return activity.WindowManager.DefaultDisplay.Height + getNavigationBarHeight(activity);
}

public static int getNavigationBarHeight(Activity activity)
{
    if (!isNavigationBarShow(activity))
    {
        return 0;
    }
    Resources resources = activity.Resources;
    int resourceId = resources.GetIdentifier("navigation_bar_height",
            "dimen", "android");
    int height = resources.GetDimensionPixelSize(resourceId);
    return height;
}

public static bool isNavigationBarShow(Activity activity)
{
    if (Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.JellyBeanMr1)
    {
        Display display = activity.WindowManager.DefaultDisplay;
        Point size = new Point();
        Point realSize = new Point();
        display.GetSize(size);
        display.GetRealSize(realSize);
        return realSize.Y != size.Y;
    }
    else
    {
        bool menu = ViewConfiguration.Get(activity).HasPermanentMenuKey;
        bool back = KeyCharacterMap.DeviceHasKey(Keycode.Back);
        if (menu || back)
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}

获取状态栏的方法(如您所说的显示信号,电池等的顶部)

private int getStatusBarHeight()
{
    Resources res = this.Resources;
    int resourceId = res.GetIdentifier("status_bar_height", "dimen", "android");
    int height = res.GetDimensionPixelSize(resourceId);
    return height;
}

The method to get navigation bar
        private int getNavigationBarHeight()
{
            Resources res = this.Resources;
            int resourceId = res.GetIdentifier("navigation_bar_height", "dimen", "android");
            int height = res.GetDimensionPixelSize(resourceId);
            return height;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM