Bu bölümde, Android için Haritalar SDK'sı kullanılarak bir Android uygulamasına eklenmiş bir haritanın nasıl yapılandırılacağı açıklanmaktadır.
Genel bakış
Uygulamanıza harita ekledikten sonra, haritanın ilk ve çalışma zamanı ayarlarını yapılandırabilirsiniz. İlk ayarların, harita kapsayıcısını (SupportMapFragment
veya MapView
) statik mi yoksa dinamik olarak mı eklediğinize bağlı olarak yapılandırılması gerekir. Harita kapsayıcısı statik olarak eklendiyse ilk harita ayarlarını düzen dosyasında yapılandırabilirsiniz.
Dinamik olarak eklenmişse OnCreate
geri çağırma yönteminde ilk ayarları bir GoogleMapOptions
nesnesiyle yapılandırabilirsiniz.
Harita kapsayıcısı eklemeyle ilgili ayrıntılı bilgi için Harita ekleme başlıklı makaleyi inceleyin.
İlk harita ayarları şunları içerir:
- Konum, yakınlaştırma, yönlendirme ve yatırma gibi kamera konumu. Kameranın konumlandırılmasıyla ilgili ayrıntılar için Kamera ve Görünüm konusuna bakın.
- Eşleme türü.
- Yakınlaştırma düğmeleri ve pusula gibi görüntülenecek kullanıcı arayüzü bileşenleri.
- Etkinleştirilecek hareketler.
- Basit modun etkin olup olmadığı.
Çalışma zamanında bu ayarları ve bazı ek ayarları, onMapReady
geri çağırma işlevindeki GoogleMap
nesnesini güncelleyerek yapılandırabilirsiniz. Ek ayarlar, GoogleMap
sınıfının yöntemleriyle (ör. trafik katmanını ve harita dolgusunu yapılandıranlar) yapılandırılır.
Örnek
Aşağıdaki örnek kodda ve yukarıdaki ekran görüntüsünde, harita aşağıdaki ayarlarla yapılandırılmıştır.
İlk ayarlar düzen dosyasında yapılandırılır:
- Yakınlaştırma kontrollerini etkinleştir.
- Döndürme hareketi kontrollerini etkinleştir.
- Harita yatırma ayarını 30 yapın.
Çalışma zamanı ayarları:
- Kamerayı Kyoto Japan'ın ortasına getirin.
- Karma harita türünü etkinleştirin.
- Trafik katmanını açın.
İlk ayarlar
<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:name="com.google.android.gms.maps.SupportMapFragment" android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" map:uiZoomControls="true" map:uiRotateGestures="true" map:cameraTilt="30" />
Çalışma zamanı ayarları
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Update the map configuration at runtime. @Override public void onMapReady(GoogleMap googleMap) { // Set the map coordinates to Kyoto Japan. LatLng kyoto = new LatLng(35.00116, 135.7681); // Set the map type to Hybrid. googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID); // Add a marker on the map coordinates. googleMap.addMarker(new MarkerOptions() .position(kyoto) .title("Kyoto")); // Move the camera to the map coordinates and zoom in closer. googleMap.moveCamera(CameraUpdateFactory.newLatLng(kyoto)); googleMap.moveCamera(CameraUpdateFactory.zoomTo(15)); // Display traffic. googleMap.setTrafficEnabled(true); } }
Başlamadan önce
Başlamadan önce aşağıdaki seçenekleri kullanarak bir proje oluşturabilir ve temel bir harita ekleyebilirsiniz:
Android Studio için Haritalar şablonunu kullanarak uygulama oluşturun. Haritalar şablonu projenizi otomatik olarak yapılandırır ve basit bir harita ekler. Bir parça, harita kapsayıcısı olarak kullanılır ve statik olarak eklenir. Ayrıntılar için quickstart göz atın.
SDK için projenizi manuel olarak yapılandırın ve temel bir harita ekleyin. Bu sayede herhangi bir Android şablonunu kullanabilir ve mevcut bir uygulamaya harita ekleyebilirsiniz.
Statik olarak ekledikten sonra haritayı yapılandırma
Bu bölümde, düzen dosyanıza statik olarak eklediyseniz haritanın başlangıç durumunun nasıl ayarlanacağı açıklanmaktadır.
Android için Haritalar SDK'sı, bir SupportMapFragment
veya MapView
için bir özel XML özelliği grubu tanımlar. Bu özelliği, haritanın ilk durumunu doğrudan düzen dosyasından yapılandırmak için kullanabilirsiniz. Şu anda aşağıdaki özellikler tanımlanmıştır:
mapType
— Gösterilecek harita türü. Geçerli değerler şunları içerir:none
,normal
,hybrid
,satellite
veterrain
.cameraTargetLat
,cameraTargetLng
,cameraZoom
,cameraBearing
,cameraTilt
— İlk kamera konumu. Ayrıntılar için kamera ve görünümler kılavuzuna bakın.uiZoomControls
,uiCompass
— Yakınlaştırma denetimlerinin ve pusulanın gösterilip gösterilmeyeceğini belirtir. Ayrıntılar içinUiSettings
sayfasına göz atın.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
: Belirli hareketlerin etkinleştirilip etkinleştirilmeyeceğini belirtir. Ayrıntılar içinUiSettings
sayfasına göz atın.zOrderOnTop
— Harita görünümünün yüzeyinin, harita penceresinin, harita denetimlerinin ve penceredeki herhangi bir nesnenin görüntülenip görüntülenmediğini belirtir. Ayrıntılar için SurfaceView.setZOrderOnTop(boolean) sayfasına bakın.useViewLifecycle
: YalnızcaSupportMapFragment
nesnesiyle geçerlidir. Haritanın yaşam döngüsünün parçanın görünümüne mi yoksa parçanın kendisine mi bağlanacağını belirtir. Ayrıntılı bilgi için buraya göz atın.liteMode
— Basit modu etkinleştirmek içintrue
; aksi takdirdefalse
.mapColorScheme
— Normal harita ve arazi haritası için renk şemasını belirtir. Değerler arasındalight
(varsayılan),dark
vefollow_system
bulunur. Yani,UI_NIGHT_MODE_MASK
için cihaz ayarına bağlı olarak geçerli sistem ayarı kullanılır. Daha fazla bilgi için Renk şemasını eşleme bölümüne bakın.
Bu özel özellikleri düzen dosyanızda kullanabilmeniz için dosyanın aşağıdaki ad alanı beyanını içermesi gerekir. map
ad alanı olmak üzere istediğiniz ad alanını seçebilirsiniz:
xmlns:map="http://schemas.android.com/apk/res-auto"
Daha sonra, map:
önekine sahip özellikleri düzen dosyanıza ekleyebilirsiniz.
Aşağıdaki düzen dosyası, özel harita özelliklerine sahip bir SupportMapFragment
nesnesini yapılandırır. Aynı özellikler, bir MapView
nesnesine de uygulanabilir.
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraBearing="112.5"
map:cameraTargetLat="-33.796923"
map:cameraTargetLng="150.922433"
map:cameraTilt="30"
map:cameraZoom="13"
map:mapType="normal"
map:mapColorScheme="dark"
map:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
Haritayı dinamik olarak ekledikten sonra yapılandırma
Bu bölümde, uygulamanıza dinamik olarak eklediyseniz haritanın ilk durumunu nasıl ayarlayacağınız açıklanmaktadır.
Dinamik olarak SupportMapFragment
veya MapView
eklediyseniz haritanın başlangıç durumunu bir GoogleMapOptions
nesnesinde ayarlayabilirsiniz. Kullanılabilen seçenekler, düzen dosyasındakilerle aynıdır.
Aşağıdaki şekilde bir GoogleMapOptions
oluşturabilirsiniz:
Kotlin
val options = GoogleMapOptions()
Java
GoogleMapOptions options = new GoogleMapOptions();
Ardından aşağıdaki gibi yapılandırın:
Kotlin
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false)
Java
options.mapType(GoogleMap.MAP_TYPE_SATELLITE) .compassEnabled(false) .rotateGesturesEnabled(false) .tiltGesturesEnabled(false);
Harita oluştururken bu seçenekleri uygulamak için aşağıdakilerden birini yapın:
SupportMapFragment
kullanıyorsanız parçayı oluşturmak ve ayarlarınızda iletmek içinSupportMapFragment.newInstance(GoogleMapOptions options)
statik fabrika yöntemini kullanın.MapView
kullanıyorsanızMapView(Context, GoogleMapOptions)
oluşturucusunu kullanın ve ayarlarınızı iletin.
Trafik katmanını ayarlama
Trafik katmanını etkinleştirerek trafik verilerini haritanızda görüntüleyebilirsiniz. setTrafficEnabled()
yöntemini çağırarak trafik katmanını etkinleştirebilir ve devre dışı bırakabilirsiniz. Ayrıca isTrafficEnabled()
yöntemini çağırarak trafik katmanının şu anda etkin olup olmadığını belirleyebilirsiniz. Aşağıdaki ekran görüntüsünde, trafik katmanının etkinleştirildiği bir harita görüntülenmektedir.
Harita türünü ayarlayın
Harita türünü ayarlamak için setMapType
yöntemini çağırın.
Örneğin, bir uydu haritasını görüntülemek için:
Kotlin
// Sets the map type to be "hybrid" map.mapType = GoogleMap.MAP_TYPE_HYBRID
Java
// Sets the map type to be "hybrid" map.setMapType(GoogleMap.MAP_TYPE_HYBRID);
Aşağıdaki resimde normal, karma ve arazi harita türleri karşılaştırılmaktadır:
3D binaları kurun
Birçok şehir yakından bakıldığında, Kanada'nın Vancouver şehrinin aşağıdaki resminde gösterildiği gibi 3D binalar olarak görünür. GoogleMap.setBuildingsEnabled(false)
numaralı telefonu arayarak 3D binaları devre dışı bırakabilirsiniz.
İç mekan harita ayarlarını yapın
Yüksek yakınlaştırma seviyelerinde harita, havalimanları, alışveriş merkezleri, büyük perakende mağazalar ve toplu taşıma istasyonları gibi iç mekan alanları için kat planlarını gösterir. İç mekan haritaları olarak adlandırılan bu kat planları, "normal" ve "uydu" harita türleri (GoogleMap.MAP_TYPE_NORMAL
ve
GoogleMap.MAP_TYPE_SATELLITE
) için gösterilir. Kullanıcı görünümü yakınlaştırdığında bu planlar otomatik olarak etkinleştirilir ve harita uzaklaştırıldığında kaybolmaya başlar.
Kullanımdan kaldırma bildirimi: Gelecekteki bir sürümde, iç mekan haritaları yalnızca normal
harita türünde kullanılabilecektir. İç mekan haritaları, bu gelecekteki sürümden itibaren satellite
, terrain
veya hybrid
haritalarında desteklenmeyecektir. isIndoorEnabled()
, iç mekan desteklenmediğinde bile şu anda olduğu gibi setIndoorEnabled()
aracılığıyla ayarlanan değeri döndürmeye devam eder. setIndoorEnabled
, varsayılan olarak true
değerine sahiptir. Sürüm notları, söz konusu harita türlerinde iç mekan desteğinin ne zaman kullanılamadığını size bildirir.
API'deki iç mekan haritaları işlevinin özetini burada bulabilirsiniz:
GoogleMap.setIndoorEnabled(false)
numaralı telefonu arayarak iç mekan haritalarını devre dışı bırakabilirsiniz. İç mekan haritaları varsayılan olarak etkindir. İç mekan haritaları aynı anda tek bir haritada gösterilir. Bu, varsayılan olarak uygulamanıza eklenen ilk haritadır. İç mekan haritalarını farklı bir haritada görüntülemek için bu haritaları ilk haritada devre dışı bırakın, ardından ikinci haritadasetIndoorEnabled(true)
konumunu arayın.- Varsayılan seviye seçiciyi (kat seçici) devre dışı bırakmak için
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
numaralı telefonu arayın. Daha ayrıntılı bilgi için Haritayla etkileşim konusuna bakın. OnIndoorStateChangeListener
— Bir binanın odakta olduğunu veya binadaki bir seviyenin etkinleştirildiğini algılayan dinleyicileri tanımlar. Ayrıntılar için Haritayla etkileşim başlıklı makaleyi inceleyin.getFocusedBuilding
— Odaklanılan binayı getirir. Ardından,IndoorBuilding.getActiveLevelIndex()
numaralı telefonu arayarak etkin seviyeyi bulabilirsiniz.- Temel haritanın stilini belirlemek, iç mekan haritalarını etkilemez.
Harita dolgusunu ayarla
Bu videoda harita dolgusu örneği gösterilmektedir.
Google haritası, container öğesiyle (genellikle MapView
veya SupportMapFragment
) tanımlanan bölgenin tamamını dolduracak şekilde tasarlanmıştır. Haritanın görünümü ve davranışı, bulunduğu kapsayıcının boyutlarına göre
tanımlanır:
- Kameranın hedefi, dolgulu bölgenin merkezini yansıtır.
- Harita denetimleri, haritanın kenarlarına göre konumlandırılır.
- Telif hakkı beyanları veya Google logosu gibi yasal bilgiler, haritanın alt kenarında görünür.
GoogleMap
işaretini kullanarak haritanın kenarlarına dolgu ekleyebilirsiniz.setPadding()
yöntemini kullanabilirsiniz. Harita, kapsayıcının tamamını doldurmaya devam eder ancak metin ve kontrol konumlandırması, harita hareketleri ve kamera hareketleri daha küçük bir alana yerleştirilmiş gibi davranır. Bu durum aşağıdaki değişikliklere yol açar:
- API çağrıları veya düğmeye basıldığında (ör. pusula, konumum, yakınlaştırma düğmeleri) gerçekleşen kamera hareketleri, dolgulu bölgeye göre belirlenir.
getCameraPosition
yöntemi, dolgulu bölgenin merkezini döndürür.Projection
vegetVisibleRegion
yöntemleri dolgulu bölgeyi döndürür.- Kullanıcı arayüzü kontrolleri, kapsayıcının kenarından belirtilen piksel sayısına göre uzaklaşır.
Haritanın bir kısmıyla çakışan kullanıcı arayüzleri tasarlarken dolgu yararlı olabilir. Aşağıdaki resimde, harita üst ve sağ kenarları boyunca dolguludur. Görünen harita kontrolleri ve yasal metin, dolgulu bölgenin kenarlarında gösterilir. Yeşil renkle gösterilen harita ise tüm kapsayıcıyı doldurmaya devam eder (mavi renkle gösterilir). Bu örnekte, harita kontrollerini gizlemeden bir menüyü haritanın sağ tarafında kaydırabilirsiniz.
Harita renk şeması
Normal ve arazi türündeki haritalarda, harita renk şemasını dinamik olarak koyu veya açık olarak ayarlayabilir ya da geçerli sistem ayarını kullanabilirsiniz. Örneğin, günün saatine veya cihazın iç ya da dış mekanda kullanımına göre haritanın renk şemasını koyulaştırabilir veya açıklayabilirsiniz.
Harita varsayılan olarak açık modu kullanır. Mevcut sistem ayarı değeri, UI_NIGHT_MODE_MASK
için cihaz ayarına göre belirlenir.
Kotlin
mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))
Java
mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));
GoogleMap.setMapColorScheme()
yöntemini kullanarak renk şemasını değiştirerek geçerli stili koyu moda veya açık moda ayarlayabilir ya da sistem ayarlarını uygulayabilirsiniz.
Kotlin
googleMap.setMapColorScheme(MapColorScheme.DARK) googleMap.setMapColorScheme(MapColorScheme.LIGHT) googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM)
Java
googleMap.setMapColorScheme(MapColorScheme.DARK); googleMap.setMapColorScheme(MapColorScheme.LIGHT); googleMap.setMapColorScheme(MapColorScheme.FOLLOW_SYSTEM);