📜  如何在Android的Google Maps中添加SearchView?(1)

📅  最后修改于: 2023-12-03 15:08:51.462000             🧑  作者: Mango

在Android的Google Maps中添加SearchView

在Android移动应用中,Google Maps是一个非常常见且有用的库。当用户需要定位,寻找地址或特定位置时,Google Maps可以为用户提供很多便利。而在Google Maps中添加搜索(SearchView)可以使用户更快速地找到他们需要的地点。

以下是在Android的Google Maps中添加SearchView的步骤。

添加Google Play服务库

首先,需要在项目中添加Google Play服务库以使用Google Maps。可以在项目的build.gradle文件中添加如下依赖:

dependencies {
    implementation 'com.google.android.gms:play-services-maps:17.0.0'
}
在XML布局文件中添加Google Maps

在布局文件中添加Google Maps视图。这可以通过添加以下代码完成:

<fragment
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
在代码中初始化Google Maps

在代码中初始化Google Maps视图。这可以通过添加以下代码完成:

val mapFragment = supportFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)

getMapAsync(this)将在视图准备就绪时调用onMapReady()方法。

在代码中创建SearchView

onCreateOptionsMenu()onCreate()方法中,创建SearchView。以下是在onCreateOptionsMenu()方法中创建SearchView的代码示例:

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.menu_main, menu)
    val searchView = menu?.findItem(R.id.action_search)?.actionView as SearchView
    return true
}

在上面的代码示例中,我们从menu资源中实例化MenuItem,并将MenuItem.actionView强制转换为SearchView

添加SearchView监听器以搜索位置

onCreate()方法中设置OnQueryTextListener以处理用户在SearchView中搜索时的响应。以下是在onCreate()方法中设置OnQueryTextListener的代码示例:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_maps)

    val searchView = findViewById<SearchView>(R.id.searchView)
    searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
        override fun onQueryTextSubmit(query: String?): Boolean {
            // 将用户输入的query值发送到Geocoder中进行地理编码
            val coder = Geocoder(this@MapsActivity)
            val addressList = coder.getFromLocationName(query, 1)
            if (addressList.isNotEmpty()) {
                // 找到第一个最佳匹配项,并将地图视图中心设置为该位置
                val address = addressList[0]
                val latLng = LatLng(address.latitude, address.longitude)
                mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 14f))
            }
            return true
        }

        override fun onQueryTextChange(newText: String?): Boolean {
            return false
        }
    })
}

在上面的代码示例中,我们实现了OnQueryTextListener接口的两个方法。onQueryTextSubmit()方法在用户提交搜索查询时调用,并获取用户输入的查询字符串。接下来,我们使用Geocoder将查询字符串编码为地理坐标,并将地图视图中心设置为该位置。onQueryTextChange()方法在SearchView文本更改时调用,并在此示例中直接返回false。

这样就完成了在Android的Google Maps中添加SearchView的操作,现在用户可以使用SearchView更有效地浏览地图并查找位置。

完整示例代码参考:https://github.com/hp0404/Android-Google-Maps-SearchView-Demo