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



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

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

我现在知道我可以使用这个设置,但就是不明白为什么会有区别。

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

谢谢。

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

Wtf?

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

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 //

你可能想查看完整的源代码,但这几乎就是它。

一种巧妙的方法是将设计时的宽度和高度存储为常量,然后在OnCreate事件中使用它们,并使用设备的实际屏幕宽度和高度,如

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

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

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

最新更新