Delphi XE5 Android - 屏幕分辨率&设备配置文件

时间:2014-01-13 21:04:48

标签: android delphi delphi-xe5

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

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

我现在知道我可以使用这个设置,但只是不明白为什么不同。

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

感谢。

更新: 刚刚得到朋友的证实,在他的Nexus平板电脑上,他看到了整个画面,这意味着表格的大小就像在德尔福中设定的一样。 http://en.wikipedia.org/wiki/Nexus_7_(2012_version)

跆拳道?

3 个答案:

答案 0 :(得分: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,但这就是它。

答案 1 :(得分:0)

一种hacky方式是将你的设计时间宽度和高度存储为const然后在OnCreate事件中使用它们,设备的实际屏幕宽度和高度如

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

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

答案 2 :(得分:0)

我发现,代表手机的图形必须与实际尺寸一样。如果电话上的屏幕为5英寸,则图形电话上的屏幕必须为5英寸(当然,宽度也一样)。下载适合您手机的图形,然后将其屏幕尺寸与手机匹配,即可完成操作。它应该在组件放置和手机运行时外观之间非常准确地匹配。