我开始在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)
跆拳道?
答案 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英寸(当然,宽度也一样)。下载适合您手机的图形,然后将其屏幕尺寸与手机匹配,即可完成操作。它应该在组件放置和手机运行时外观之间非常准确地匹配。