При разработке приложений с использованием Delphi 12.1 и компонента TMapView из FireMonkey Framework, пользователи могут столкнуться с проблемой отображения кнопок навигации и указателя GPS в нижнем правом углу компонента после клика на маркер. В данной статье мы рассмотрим, как скрыть эти кнопки, чтобы улучшить внешний вид и удобство использования приложения.
Проблема
По умолчанию, при клике на маркер в компоненте TMapView, в его нижней части отображаются кнопки навигации и указателя GPS. Это поведение может быть нежелательным для некоторых приложений.
Решение, предложенное в контексте
В контексте заданной проблемы пользователи обнаружили, что можно отключить панель инструментов карты (MapToolBar) с помощью метода setMapToolbarEnabled(false) в Google Maps. Однако, в Delphi 12.1 и компоненте TMapView такой возможности напрямую не предоставлено.
После исследования кода FireMonkey Framework, было обнаружено, что интерфейс JGoogleMap содержит необходимые методы для отключения панели инструментов. Этот интерфейс используется внутри компонента TAndroidMapView. Попытки доступа к экземпляру интерфейса с помощью RTTI не увенчались успехом.
Альтернативное решение
Существует альтернативный способ доступа к экземпляру JGoogleMap через компонент TMapView. Это можно сделать, используя метод getMapAsync, который принимает в качестве параметра коллбэк, вызываемый при готовности JGoogleMap. В этом коллбэке можно вызвать метод setMapToolbarEnabled(False), чтобы скрыть панель навигации.
Пример кода
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Maps,
Androidapi.JNI.PlayServices.Maps;
type
TForm1 = class(TForm)
MapView1: TMapView;
procedure FormCreate(Sender: TObject);
private
FMap: JGoogleMap;
FMapReadyCallback: JOnMapReadyCallback;
procedure MapReady(AMap: JGoogleMap);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
uses
Androidapi.JNIBridge;
type
TMapReadyCallback = class(TJavaLocal, JOnMapReadyCallback)
private
FCallback: TProc<JGoogleMap>;
public
{ JOnMapReadyCallback }
procedure onMapReady(googleMap: JGoogleMap); cdecl;
public
constructor Create(const ACallback: TProc<JGoogleMap>);
end;
constructor TMapReadyCallback.Create(const ACallback: TProc<JGoogleMap>);
begin
inherited Create;
FCallback := ACallback;
end;
procedure TMapReadyCallback.onMapReady(googleMap: JGoogleMap);
begin
FCallback(googleMap);
end;
procedure TForm1.FormCreate(Sender: TObject);
var
LMapView: JMapView;
begin
if Supports(MapView1, JMapView, LMapView) then
begin
FMapReadyCallback := TMapReadyCallback.Create(MapReady);
LMapView.getMapAsync(FMapReadyCallback);
end;
end;
procedure TForm1.MapReady(AMap: JGoogleMap);
begin
FMap := AMap;
FMap.getUiSettings.setMapToolbarEnabled(False);
end;
end.
Вывод
Используя предложенный пример кода, разработчики могут скрыть панель навигации в компоненте TMapView, что позволит улучшить пользовательский интерфейс и сделать приложение более персонализированным.
Разработчики приложений на Delphi 12.1 столкнулись с задачей скрыть кнопки навигации и указателя GPS в компоненте TMapView после клика на маркер, чтобы улучшить внешний вид приложения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.