2009-11-13 127 views
2

我正在为Windows Mobile 6.5编写一个Compact Framework应用程序。该应用程序将在Windowsphone Marketplace中销售。要做到这一点,我必须支持各种屏幕尺寸和分辨率...但我该如何做到这一点?是否有最佳做法?我主要使用标准控件,但在Mainform中使用背景图像...我是否必须将其存储在任何分辨率中并根据我的应用运行哪个设备动态显示它?如何在Windows Mobile中支持不同的屏幕尺寸?

谢谢您的建议和帮助

托马斯

回答

3

我就开始说这是一个有争议的话题。

我个人认为你应该识别显着不同的分辨率/尺寸范围,并提供一个不同的UI层,当你检测到从一个范围到另一个范围的调整大小时,你可以交换(动态切换可能不是你 - 在这种情况下,你只是在加载时检查)。如果您确定的范围非常有限并且彼此相似,那么这种方法显然没有意义,因为您的应用应该能够适当调整大小的范围相同。

试图用相同的UI层解决所有可能的解决方案可能听起来像一个好主意,但它可能是一个灾难的秘诀。你可能会得到它的工作,但你很可能最终会得到一串字符串,一大堆IF-ELSE和SWITCH语句会查看像素大小,调整控件大小并移动它们。

如果您仔细考虑一下,Google地图(对于其中一个,但想想任何iPhone应用程序)不会在移动设备和桌面浏览器等上提供相同的用户界面。如果这就是我们所谈论的尺寸的差异(移动VS类似桌面的分辨率),那么您必须按照上述建议滚动不同的UI层。

圣杯是所谓的液体布局 - WPF可以帮助这个,但因为你在紧凑的框架,排除。

我最近问了一个非常类似的问题 - 你可以看看它here if you wanna read different opinions

+0

+1。尝试通过移动和调整大小来处理代码中的方向和分辨率更改是一场噩梦。仅仅基于查询的屏幕分辨率就可以界面化界面并创建实现。 – ctacke 2009-11-13 19:11:49

1

这是一个棘手的问题。以下的低努力计划让我获得了合理的结果。 (这是Winform的导向,顺便说一句)

最大的问题是分辨率是较小比预期。因此,尽可能小地创建屏幕,并特别注意您的锚点和底座设置。当显示每个表单将其设置为全屏时,锚定属性应该以合理的方式进行合理的显示。

如果分辨率比预期的要大得多,这只会显得很愚蠢。
请注意,您可以通过Screen.PrimaryScreen.Bounds调用找到当前平台的屏幕大小。

1

我最近建立了一个小应用程序,只是为了尝试一下。我需要显示背景图片,所以我不能使用像Label等内置控件,因为它们不支持透明背景。

我最终使用GDI +绘制了表单的Paint事件中的整个接口。

处理不同的屏幕分辨率结果非常简单:接口的原型为普通96dpi屏幕(最小),然后所有尺寸都使用96/actual_dpi计算的因子进行缩放。您可以使用找到的代码here(有点旧,但仍在工作)检索屏幕的实际DPI设置。然后我用模拟器提供的所有分辨率测试了应用程序,发现没有问题。警告:我“浪费”了屏幕的下半部分,所以没有什么特别的地方可以解决方形屏幕和横向/纵向的问题。