Bu konuda, Android için Haritalar SDK'sı kullanılarak Android uygulamasına eklenen bir haritanın nasıl yapılandırılacağı açıklanmaktadır.
Genel Bakış
Uygulamanıza bir 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 mi eklediğinize göre 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 eklendiyse ilk ayarları OnCreate
geri çağırma işlevinde GoogleMapOptions
nesnesi ile yapılandırabilirsiniz.
Harita kapsayıcısı ekleme hakkında ayrıntılı bilgi için Harita ekleme başlıklı makaleyi inceleyin.
İlk harita ayarları şunlardır:
- Konum, yakınlaştırma, yön ve yatırma dahil olmak üzere kamera konumu. Kamera konumlandırması hakkında ayrıntılı bilgi için Kamera ve Görüntü bölümüne bakın.
- Harita 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, onMapReady
geri çağırma işlevinde GoogleMap
nesnesini güncelleyerek bu ayarları ve bazı ek ayarları yapılandırabilirsiniz. Ek ayarlar, GoogleMap
sınıfının yöntemleri (ör. trafik katmanını ve harita dolgusunu yapılandıranlar) aracılığıyla 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ı içinde yapılandırılır:
- Yakınlaştırma kontrollerini etkinleştirin.
- Döndürme hareketi kontrollerini etkinleştirin.
- Haritanın eğimini 30 olarak ayarlayın.
Çalışma zamanı ayarları:
- Kamerayı Japonya'nın Kyoto kentine ortalayın.
- 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 bir uygulama oluşturun. Haritalar şablonu, projenizi otomatik olarak yapılandırır ve temel bir harita ekler. Harita kapsayıcısı olarak bir parça kullanılır ve bu parça statik olarak eklenir. Ayrıntılar için hızlı başlangıç bölümüne bakı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, haritayı düzen dosyanıza statik olarak eklediyseniz haritanın ilk durumunu nasıl ayarlayacağınız açıklanmaktadır.
Android için Haritalar SDK'sı, haritanın ilk durumunu doğrudan düzen dosyasından yapılandırmak için kullanabileceğiniz bir SupportMapFragment
veya MapView
için bir dizi özel XML özelliği tanımlar. Şu anda aşağıdaki özellikler tanımlanmıştır:
mapType
: Gösterilecek harita türü. Geçerli değerler şunlardır:none
,normal
,hybrid
,satellite
veterrain
.cameraTargetLat
,cameraTargetLng
,cameraZoom
,cameraBearing
,cameraTilt
: İlk kamera konumu. Ayrıntılar için kamera ve görüntüler 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 bakın.uiZoomGestures
,uiScrollGestures
,uiRotateGestures
,uiTiltGestures
: Belirli hareketlerin etkin olup olmadığını belirtir. Ayrıntılar içinUiSettings
bölümüne bakın.zOrderOnTop
: Harita görünümünün yüzeyinin harita penceresinin, harita kontrollerinin ve penceredeki herhangi bir nesnenin üzerinde gösterilip gösterilmediğini belirtir. Ayrıntılar için SurfaceView.setZOrderOnTop(boolean) işlevine bakın.useViewLifecycle
: YalnızcaSupportMapFragment
nesnesi ile 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ğlı olması gerektiğini belirtir. Ayrıntılar için buraya göz atın.liteMode
: Basit modu etkinleştirmek içintrue
, aksi takdirdefalse
.mapColorScheme
: Normal ve arazi haritası için renk düzenini belirtir. Değerler arasındalight
(varsayılan),dark
vefollow_system
bulunur. Bu değerler,UI_NIGHT_MODE_MASK
cihaz ayarına göre mevcut sistem ayarının kullanılacağı anlamına gelir. Daha fazla bilgi için Harita renk şeması başlıklı makaleyi inceleyin.
Bu özel özellikleri düzen dosyanızda kullanabilmek için dosyanızda aşağıdaki ad alanı beyanının bulunması gerekir. Herhangi bir ad alanı seçebilirsiniz. map
olması gerekmez:
xmlns:map="http://schemas.android.com/apk/res-auto"
Ardından, özellikleri map:
ön ekiyle düzen dosyanıza ekleyebilirsiniz.
Aşağıdaki düzen dosyası, özel harita özellikleriyle bir SupportMapFragment
nesnesini yapılandırır. Aynı özellikler 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"/>
Dinamik olarak ekledikten sonra haritayı yapılandırma
Bu bölümde, haritayı uygulamanıza dinamik olarak eklediyseniz haritanın ilk durumunun nasıl ayarlanacağı açıklanmaktadır.
Dinamik olarak bir SupportMapFragment
veya MapView
eklediyseniz haritanın ilk durumunu bir GoogleMapOptions
nesnesinde ayarlayabilirsiniz. Kullanılabilir seçenekler, düzen dosyasında bulunan seçeneklerle aynıdır.
GoogleMapOptions
öğesini aşağıdaki gibi 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ızı iletmek içinSupportMapFragment.newInstance(GoogleMapOptions options)
statik fabrika yöntemini kullanın.MapView
kullanıyorsanızMapView(Context, GoogleMapOptions)
yapıcısını kullanın ve ayarlarınızı iletin.
Haritanızı yerelleştirme
Uygulamanıza MapView
veya SupportMapFragment
eklediğinizde, haritadaki metin öğeleri kullanıcının cihaz ayarlarına ve konumuna göre uygun dilde gösterilir. Gradle dosyanıza bir resConfigs
öğesi ekleyerek uygulamanızın kullandığı dilleri, desteklenen tüm dillerin bir alt kümesiyle kısıtlayabilirsiniz. Bu, kullanılmayan dilleri kaldırmak için kullanışlıdır ve uygulamanızın ikili dosya boyutunu da azaltır. Örneğin:
defaultConfig {
resConfigs "en", "fr", "es", "zh", "de", "ja", "ru", "ko", "pt", "in"
}
Android uygulamanızı yerelleştirme hakkında daha fazla bilgi edinin.
Trafik katmanını ayarlama
Trafik katmanını etkinleştirerek haritanızda trafik verilerini görüntüleyebilirsiniz. setTrafficEnabled()
yöntemini çağırarak trafik katmanını etkinleştirebilir ve devre dışı bırakabilir, isTrafficEnabled()
yöntemini çağırarak da trafik katmanının şu anda açık olup olmadığını belirleyebilirsiniz. Aşağıdaki ekran görüntüsünde, trafik katmanının etkin olduğu bir harita gösterilmektedir.
Harita türünü ayarlama
Harita türünü ayarlamak için setMapType
yöntemini çağırın.
Örneğin, uydu haritası 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ılmıştır:
3D binalar oluşturma
Birçok şehir, yakın planda görüntülendiğinde 3D binalar gösterir. Kanada'nın Vancouver şehrinin aşağıdaki resminde bu binaları görebilirsiniz. GoogleMap.setBuildingsEnabled(false)
çağrısını yaparak 3D binaları devre dışı bırakabilirsiniz.
Kapalı alan haritası ayarlarını yapma
Yüksek yakınlaştırma düzeylerinde harita; havaalanları, alışveriş merkezleri, büyük perakende mağazaları ve toplu taşıma istasyonları gibi kapalı alanların 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ı yakınlaştırdığında otomatik olarak etkinleştirilir ve harita uzaklaştırıldığında kaybolur.
Destek sonu bildirimi: İleride yayınlanacak bir sürümde kapalı alan haritaları yalnızca normal
harita türünde kullanılabilecektir. Bu sürümden itibaren satellite
, terrain
veya hybrid
haritalarında kapalı alan haritaları desteklenmeyecek. Kapalı desteklenmeyen yerlerde bile isIndoorEnabled()
, şu anda olduğu gibi setIndoorEnabled()
üzerinden ayarlanan değeri döndürmeye devam edecektir. Varsayılan olarak setIndoorEnabled
, true
değerini alır. Bu harita türlerinde kapalı alan desteğinin ne zaman kaldırılacağını sürüm notlarından öğrenebilirsiniz.
API'deki iç mekan haritaları işlevinin özetini aşağıda bulabilirsiniz:
GoogleMap.setIndoorEnabled(false)
numaralı telefonu arayarak kapalı 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. Kapalı mekan haritalarını farklı bir haritada görüntülemek için ilk haritada devre dışı bırakın, ardından ikinci haritadasetIndoorEnabled(true)
işlevini çağırın.- Varsayılan seviye seçiciyi (zemin seçici) devre dışı bırakmak için
GoogleMap.getUiSettings().setIndoorLevelPickerEnabled(false)
çağrısı yapın. Daha fazla bilgi için Haritada etkileşim başlıklı makaleyi inceleyin. OnIndoorStateChangeListener
: Bir binanın odağa girdiğini veya bir binanın bir katında etkinleşme olduğunu algılayan dinleyicileri tanımlar. Ayrıntılar için Haritada etkileşimde bulunma bölümüne bakın.getFocusedBuilding
: Odaktaki binayı alır. ArdındanIndoorBuilding.getActiveLevelIndex()
işlevini çağırarak etkin düzeyi bulabilirsiniz.- Temel haritanın stili, kapalı mekan haritalarını etkilemez.
Harita alan ayarlaması yapma
Bu videoda, harita dolgusu örneği gösterilmektedir.
Google haritası, kapsayıcı öğesi (genellikle MapView
veya SupportMapFragment
) tarafından tanımlanan bölgenin tamamını dolduracak şekilde tasarlanmıştır. Haritanın görünümü ve davranışının çeşitli yönleri, kapsayıcısının boyutlarına göre belirlenir:
- Kameranın hedefi, dolgulu bölgenin merkezini yansıtır.
- Harita kontrolleri, 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
simgesini kullanarak haritanın kenarlarına dolgu ekleyebilirsiniz.setPadding()
yöntemini kullanın. 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 neden olur:
- API çağrıları veya düğme basma işlemleri (ör. pusula, konumum, yakınlaştırma düğmeleri) aracılığıyla yapılan kamera hareketleri, dolgu bölgesine göredir.
getCameraPosition
yöntemi, doldurulmuş bölgenin merkezini döndürür.Projection
vegetVisibleRegion
yöntemleri, doldurulmuş bölgeyi döndürür.- Kullanıcı arayüzü kontrolleri, kapsayıcının kenarından belirtilen piksel sayısı kadar ofsetlenir.
Boşluk, haritanın bir kısmıyla örtüşen kullanıcı arayüzleri tasarlarken yararlı olabilir. Aşağıdaki resimde harita, üst ve sağ kenarlarında boşluk bırakılarak oluşturulmuştur. Görünür harita kontrolleri ve yasal metin, yeşil renkli dolgulu bölgenin kenarlarında gösterilir. Harita ise mavi renkli kapsayıcının tamamını doldurmaya devam eder. Bu örnekte, harita denetimlerini gizlemeden haritanın sağ tarafına bir menü yerleştirebilirsiniz.
Harita renk şeması
Normal ve arazi türündeki haritalar için harita renk şemasını dinamik olarak koyu, açık veya mevcut sistem ayarını kullanacak şekilde ayarlayabilirsiniz. Örneğin, günün saatine veya cihazın kapalı ya da açık alanda kullanılmasına göre harita renk şemasını koyulaştırmak ya da açmak için bu özelliği kullanabilirsiniz.
Harita varsayılan olarak açık modu kullanır. Mevcut sistem ayarı değeri, UI_NIGHT_MODE_MASK
için cihaz ayarına dayanır.
Kotlin
mapFragment = SupportMapFragment.newInstance(GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2))
Java
mapFragment = SupportMapFragment.newInstance(new GoogleMapOptions().mapColorScheme(MapColorScheme.DARK).mapId(mapId2));
Mevcut stili koyu mod, açık mod veya sistem ayarlarına göre ayarlamak için GoogleMap.setMapColorScheme()
yöntemini kullanarak renk şemasını değiştirebilirsiniz.
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);
Arka plan rengini yapılandırma
Koyu modda çalışırken veya harita görünümleri arasında geçiş yaparken varsayılan harita arka plan rengini yapılandırmak yararlı olabilir. Bu, harita seçenekleri backgroundColor
mülkü ayarlanarak yapılabilir.
Kotlin
private val googleMapOptions: GoogleMapOptions = GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
Java
private GoogleMapOptions options = new GoogleMapOptions().backgroundColor(Color.argb(255, 255, 0, 0));
Arka plan rengini yapılandırmak için bulut tabanlı harita stillerini de kullanabilirsiniz. Harita stilinde ayarlanan arka plan rengi, yerel arka plan renginden daha yüksek önceliğe sahiptir. Daha fazla bilgi için bulut tabanlı harita stili için Uygulama arka plan rengini değiştirme başlıklı makaleyi inceleyin.