[英]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();
我不知道你会如何使用它,正如你所说我已经将你上面的方法转换为 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.