下面你会看到一个在Windows Phone 8.1中运行的屏幕。两者都声称视口宽度和高度为800x480但是从图像中可以看出635的导航按钮与游戏区域重叠。
我已经检查过GraphicsDevice.Adapter和GraphicsDevice.Viewport中的各种属性,但它们都是一样的!
屏幕在C#UWP Monogame代码中运行。我将PrefferedBackBufferWidth和Height设置为480x800。
如何判断导航按钮是否占据屏幕的一部分?
答案 0 :(得分:12)
我会进一步扩展答案。
在Windows Phone 8.1中,您有两个ApplicationViewBoundsMode枚举值。
要使您的应用使用ApplicationViewBoundsMode.UseVisible
选项,请在Windows.Current.Activate();
#if WINDOWS_PHONE_APP
ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseVisible);
#endif
要使您的应用使用ApplicationViewBoundsMode.UseCoreWindow
选项,请在Windows.Current.Activate();
#if WINDOWS_PHONE_APP
ApplicationView.GetForCurrentView().SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);
#endif
在某些情况下,开发人员可能希望使用UserCoreWindow
选项在应用栏下显示内容,但作为副作用导航软按钮会遮挡部分页面以解决问题,请按照下一个解决方案进行操作。 强>
您可以在 WindowsPhone 中侦听ApplicationView.GetForCurrentView()。VisibleBoundsChanged并更新页面边距。
以下是Joost van在修复此问题时所写的article(以及您可以立即使用的行为)
从上述链接中引用问题说明
如果应用程序视图绑定模式在App.Xaml.cs中设置为ApplicationViewBoundsMode.UseCoreWindow,则手机会报告整个屏幕大小 - 不仅是顶部状态栏通常采用的部分,还是底部的应用程序栏,还有按钮栏使用的部分。
他解决方案的一个片段,他更新了页边距
void KeepInViewBehaviorVisibleBoundsChanged(ApplicationView sender, object args)
{
UpdateBottomMargin();
}
private void UpdateBottomMargin()
{
if (WindowHeight > 0.01)
{
var currentMargins = AssociatedObject.Margin;
var newMargin = new Thickness(
currentMargins.Left, currentMargins.Top, currentMargins.Right,
originalBottomMargin +
(WindowHeight - ApplicationView.GetForCurrentView().VisibleBounds.Bottom));
AssociatedObject.Margin = newMargin;
}
}
答案 1 :(得分:0)
隐藏单一窗口手机8.1游戏中的导航栏在InitializePhoneApplication()方法下的app.xaml.cs文件中添加以下代码
RootFrame = new PhoneApplicationFrame();
//I have set it to RootVisual to hide navigationbar
RootFrame.FullScreen = true;
if (RootVisual != RootFrame)
RootVisual = RootFrame;