Aggiunta configurazione base per l'app Android
Implementate le configurazioni iniziali in `AndroidManifest.xml` e `Nuvolari.csproj`. Creata la classe `MainActivity` per gestire la mappa con `SearchView` per la ricerca di luoghi. Definiti i layout in `activity_main.axml` e `activity_main.xml`. Aggiunti file di risorse per le icone dell'app e creato `ic_launcher_background.xml` per il colore di sfondo. Definiti i testi dell'app in `strings.xml`.
This commit is contained in:
90
Nuvolari/MainActivity.cs
Normal file
90
Nuvolari/MainActivity.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
using Android.App;
|
||||
using Android.OS;
|
||||
using Android.Gms.Maps;
|
||||
using Android.Gms.Maps.Model;
|
||||
using Android.Widget;
|
||||
using Android.Locations;
|
||||
using System.Threading.Tasks;
|
||||
using System.Linq;
|
||||
|
||||
/*
|
||||
* IDEE:
|
||||
* Fare una versione molto base dell'app senza troppe funzionalità, giusto per mostrare una mappa.
|
||||
* Fare poi una versione con più funzionalità, ma con pubblicità per guadagnare qualcosa da quello.
|
||||
*/
|
||||
|
||||
namespace Nuvolari
|
||||
{
|
||||
[Activity(Label = "@string/app_name", MainLauncher = true)]
|
||||
public class MainActivity : Activity, IOnMapReadyCallback
|
||||
{
|
||||
private MapFragment? mapFragment;
|
||||
private GoogleMap? googleMap;
|
||||
private SearchView? searchView;
|
||||
|
||||
protected override void OnCreate(Bundle? savedInstanceState)
|
||||
{
|
||||
base.OnCreate(savedInstanceState);
|
||||
|
||||
// Usa il layout personalizzato con SearchView e MapFragment
|
||||
SetContentView(Resource.Layout.activity_main);
|
||||
|
||||
// Ottieni riferimenti ai componenti UI
|
||||
searchView = FindViewById<SearchView>(Resource.Id.searchView);
|
||||
mapFragment = FragmentManager.FindFragmentById(Resource.Id.map) as MapFragment;
|
||||
|
||||
mapFragment?.GetMapAsync(this);
|
||||
|
||||
// Gestione ricerca
|
||||
if (searchView != null)
|
||||
{
|
||||
searchView.QueryTextSubmit += async (s, e) =>
|
||||
{
|
||||
var query = e?.Query ?? string.Empty;
|
||||
await SearchAndMoveToLocationAsync(query);
|
||||
searchView.ClearFocus();
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public void OnMapReady(GoogleMap map)
|
||||
{
|
||||
googleMap = map;
|
||||
// Imposta solo la navigazione base (scroll/zoom)
|
||||
googleMap.UiSettings.CompassEnabled = false;
|
||||
googleMap.UiSettings.MapToolbarEnabled = false;
|
||||
googleMap.UiSettings.MyLocationButtonEnabled = false;
|
||||
|
||||
// Posizione iniziale: Milano
|
||||
var position = new LatLng(45.4642, 9.19);
|
||||
googleMap.MoveCamera(CameraUpdateFactory.NewLatLngZoom(position, 10));
|
||||
}
|
||||
|
||||
private async Task SearchAndMoveToLocationAsync(string query)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(query) || googleMap == null)
|
||||
return;
|
||||
|
||||
var geocoder = new Geocoder(this);
|
||||
#pragma warning disable CA1422 // Suppress warning for obsolete API on Android 33+
|
||||
var addresses = await Task.Run(() => geocoder.GetFromLocationName(query, 1));
|
||||
#pragma warning restore CA1422
|
||||
var address = addresses?.FirstOrDefault();
|
||||
if (address != null)
|
||||
{
|
||||
var latLng = new LatLng(address.Latitude, address.Longitude);
|
||||
RunOnUiThread(() =>
|
||||
{
|
||||
googleMap?.AnimateCamera(CameraUpdateFactory.NewLatLngZoom(latLng, 10));
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
RunOnUiThread(() =>
|
||||
{
|
||||
Toast.MakeText(this, "Luogo non trovato", ToastLength.Short).Show();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user