Delphi RAD STUDIO android应用程序与kitkat 4.4.2上的状态栏重叠

时间:2015-07-24 19:46:00

标签: android delphi firemonkey

我在Android上测试简单的delphi应用程序,但结果应用程序与设备上的状态栏重叠。我使用的是android kitkat 4.4.2和delphi xe8。这是截图: app shown on device

我知道delphi正在使用firemonkey来使用OpenGL渲染gui。所以我尝试在android studio上制作一个简单的项目来测试我的设备上的openGL,知道它是否重叠。但结果应用程序显示正常。所以我猜这是内部delphi操作(或配置可能)导致这个问题。

那么如何让我的设备上的delphi应用程序显示正常(状态栏下方的应用程序)?

注意:我在android冰淇淋三明治和果冻豆上尝试它,应用显示正常,不重叠。

1 个答案:

答案 0 :(得分:2)

我找到了一些解决方法。

我使用getResource方法获取状态栏高度,并使用该值设置表单的顶部填充。但由于状态栏高度值不同于delphi表格(在我的情况下它有更多的价值),我必须通过除以内容高度乘以表格高度来调整它。我认为它与像素和密度像素有关。我还不清楚它,所以我只是使用逻辑。

以下是代码:

uses
    Androidapi.Helpers,
    Androidapi.JNI.JavaTypes,
    Androidapi.JNI.GraphicsContentViewText,
    AndroidApi.Jni.App;

Procedure TForm1.setPadding();
var
  statusbarHeight,FormStatusbarHeight,contentHeight:integer;
  view:JView;
begin
  if top=0 then begin    

    //get status bar height
    SharedActivity.getResources.getIdentifier(StringToJString('status_bar_height'),
          StringToJString('dimen'),
          StringToJString('android'));
    if resourceID>0 then begin
      statusBarHeight:=resource.getDimensionPixelSize(resourceID);
    end;

    //get content height
    resourceid:=Resource.getIdentifier(StringToJString('content'),
          StringToJString('id'),
          StringToJString('android'));
    if resourceID>0 then begin
      view:=SharedActivity.findViewById(resourceID);
    end;
    contentHeight:=view.getHeight;

    //count statusbar height value on form
    FormStatusBarHeight:=round(statusbarheight*self.Height/contentHeight);
    //set padding    
    self.padding.top:=FormStatusBarHeight;
  end;
end;

Self.top属性可以指示应用程序是否重叠。 如果app与状态栏重叠,则self.top的值为零。