【问题标题】:Delphi XE5 Android - Screen resolution & device profilesDelphi XE5 Android - 屏幕分辨率和设备配置文件
【发布时间】:2014-01-13 21:04:47
【问题描述】:

我开始在Delphi XE5中做一个android的应用程序,遇到了一些麻烦。第一个是在设计时为设备创建新配置文件时。我为我的 HTC One (M7) 创建了新的配置文件,它有 4,7" 屏幕,分辨率为 1080x1920。当使用这些数据创建配置文件时,我在设备本身上运行它后才得到图片的左上部分。所以,从那时起,我正在运行我的应用程序,因此我至少可以在默认配置文件“5,1”WVGA Android Phone (480dp x 800dp: mdpi) 的模式下测试我正在执行的代码,因为在此设置下,我看到大约 75% 的设计时表单大小...任何人都知道为什么会发生这种情况,如果这是 XE5 的问题,还是在手机上运行时应用程序本身的问题?

更新:我从 RAD 工作室的示例项目中发现,如果我使用同样具有 1080x1920 分辨率的三星 Galaxy S4 模板,它也是我的 HTC One 的正确格式。只是看不到它的设置,因为股票配置文件无法编辑,但肯定不会设置为 1080x1920,因为表单本身看起来比我创建的要小。

我现在知道我可以使用此设置,但就是不明白为什么会有差异。

无论如何,现在的主要问题是,如何设置屏幕设置,以便它们根据设备和设备的屏幕分辨率应用和更改...?

谢谢。

更新: 刚从一位朋友那里得到证实,在他的 Nexus 平板电脑上,他可以看到整个图片,这意味着表单的大小与在 delphi 中设置的一样。 http://en.wikipedia.org/wiki/Nexus_7_(2012_version)

什么?

【问题讨论】:

    标签: android delphi delphi-xe5


    【解决方案1】:

    对于大多数手机来说,这是一个真正的问题。大多数设备都有屏幕比例。 ios有它,大多数现代Android设备都有它。您需要做的是通过将位图的尺寸乘以屏幕比例来将位图缩放到屏幕上。我自己的代码示例:

    function TMandel_View.get_screenscale: Single;
    var
       ScreenService: IFMXScreenService;
    begin
       Result := 1;
       if TPlatformServices.Current.SupportsPlatformService (IFMXScreenService, IInterface(ScreenService)) then
       begin
          Result := ScreenService.GetScreenScale;
       end; // if
    end; // get_screenscale //
    
    procedure TMandel_View.FormActivate (Sender: TObject);
    var
      screenscale: Single;
    begin
       if not FActivated then  // Initialization should be called only once
       begin
          FActivated := True;  // Disable initialization each time form is activated
          screenscale := get_screenscale;
          FImageBitmapWidth := FImage.Width * screenscale;
          FImageBitmapHeight := FImage.Height * screenscale;
          FImage.Bitmap.SetSize (Round (FImageBitmapWidth), Round (FImageBitmapHeight));
    // etc...
       end; // if
    end; // FormActivate //
    

    你可能想view the full sourcode,但差不多就是这样。

    【讨论】:

    • 感谢您的回答。我不知道整个屏幕比例的事情:/我相信我现在理解了这个问题,但还不完全是你提供的解决方案。我还检查了您提供的链接中的源代码,并且(由于某些 Uses 单元的文件名似乎错误而导致编译遇到一些麻烦之后)在我的 Htc One 上进行了尝试,并且似乎它确实调整了大小,至少到目前为止正如我通过表单顶部的按钮所知道的那样。将通过并在几天内返回结果。然后会自动调整所有手机上的图片大小,还是只调整那些有屏幕比例的手机?太棒了!
    • 上面的代码适用于 windows、osx、ifone、ipad、galaxy tab 2 (7 & 10) 和 nexus 7。现在也在 HTC One 上进行了测试 :-) 大多数设备都有屏幕比例,如果没有结果设置为 1:不重新缩放。平台服务很重要,所以要仔细研究它给你带来了什么。
    • 感谢您的提示。会记下并放在我的“检查”列表中,关于 Android,我需要完成很多工作.. :)
    • @Marc,如果这是正确答案,您介意接受吗?
    • 还没有完全通过这个,所以不能真正确认工作,但一旦我愿意,我会接受它,如果有效!
    【解决方案2】:

    一个 hacky 方法是将您的设计时宽度和高度存储为 const,然后在 OnCreate 事件中使用它们与设备的实际屏幕宽度和高度类似

    Offset.Height := Design.Height - Screen.Height;
    Offset.Width := Design.Width - Screen.Width;
    

    然后您使用这些偏移量来对齐所有标签、编辑等。

    【讨论】:

      【解决方案3】:

      我发现,您代表手机的图形必须是真人大小的。如果您手机上的屏幕是 5 英寸,那么图形手机上的屏幕必须是 5 英寸(当然宽度也是如此)。为您的手机下载图形并将其屏幕尺寸与您的手机相匹配,您就完成了。它应该非常准确地匹配组件放置和手机在运行时的外观。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多