Долго бился со следующим, есть три типа устройств: 1. где отсутствует NavBar физически, 2. где он есть и всегда включен, 3. где он есть, но его можно выключить в настройках. В результате добился нормальной работы окраски NavBar на всех типах. Немного изменил код, приведенный Равилем из примера Update2
function hasNavbar(out navBarHeight: Integer): boolean;
// uses Androidapi.JNI.Util,
{$IFDEF ANDROID}
var
Window: JWindowExt;
realSize: JPoint;
screenSize: JPoint;
metrics: JDisplayMetrics;
difference, resourceID: Integer;
{$ENDIF}
begin
Result := false;
navBarHeight := 0;
{$IFDEF ANDROID}
metrics := TJDisplayMetrics.Create;
realSize := TJPoint.Create;
screenSize := TJPoint.Create;
Window := GetWindowExt;
Window.getWindowManager.getDefaultDisplay.getRealMetrics(metrics);
realSize.x := metrics.widthPixels;
realSize.y := metrics.heightPixels;
Window.getWindowManager.getDefaultDisplay.getSize(screenSize);
if realSize.y <> screenSize.y then
begin
difference := realSize.y - screenSize.y;
resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('navigation_bar_height'),
StringToJString('dimen'), StringToJString('android'));
if resourceID > 0 then
navBarHeight := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID));
if navBarHeight > 0 then
if difference < navBarHeight then
begin
navBarHeight := 0;
Result := false;
end
else
Result := true;
end
else
begin
navBarHeight := 0;
Result := false;
end;
{$ENDIF}
end;