Kotlin 应用程序中的地理位置按钮不可用

Geolocation button in Kotlin application is unavailable

我正在尝试创建一个地图应用程序,它可以获取您的位置并同时保存您的标记。

但是我在尝试同时添加 FloatingButton 时遇到了麻烦。

这是我的 content_main.XML 和 LoactionButton 之前的 .XML 是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.google.android.material.appbar.AppBarLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary">
                <RelativeLayout
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent"
                    android:layout_weight="13"
                    android:orientation="horizontal"
                    android:gravity="center_vertical">
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/app_name"
                        android:textColor="#FFFFFF"
                        style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"/>
                </RelativeLayout>
            </androidx.appcompat.widget.Toolbar>
    </com.google.android.material.appbar.AppBarLayout>
</LinearLayout>

我一直用 RelativeLayout 替换 LinearLayout 元素,因为尝试 content_main.xml 中的 FloatingButton 我获得了 next . .xml 之前的图像是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.google.android.material.appbar.AppBarLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary">
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="13"
                android:orientation="horizontal"
                android:gravity="center_vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/app_name"
                    android:textColor="#FFFFFF"
                    style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"/>
            </LinearLayout>
        </androidx.appcompat.widget.Toolbar>
    </com.google.android.material.appbar.AppBarLayout>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:layout_marginTop="180dp"
        android:backgroundTint="#FFF"
        android:clickable="true"
        android:focusable="true"
        app:fabSize="normal">
    </com.google.android.material.floatingactionbutton.FloatingActionButton>

</LinearLayout>

所以在 google 中搜索了很多示例,我看到有人使用 RelativeLayoutFloatingButton 放在主要内容中。我决定更改为 RelativeLayout,但是 LocationButton 不可用,就像前一个 this 一样。xml 是下一个,并且是实际的:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.google.android.material.appbar.AppBarLayout
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary">
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="13"
                android:orientation="horizontal"
                android:gravity="center_vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/app_name"
                    android:textColor="#FFFFFF"
                    style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"/>
            </LinearLayout>
        </androidx.appcompat.widget.Toolbar>
    </com.google.android.material.appbar.AppBarLayout>

    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginRight="10dp"
        android:layout_marginTop="180dp"
        android:backgroundTint="#FFF"
        android:clickable="true"
        android:focusable="true"
        app:fabSize="normal">
    </com.google.android.material.floatingactionbutton.FloatingActionButton>

</RelativeLayout>

我搜索了很多示例并修改了我的 content_main.xml 但是我没有将位置按钮与 FloatingButton 放在一起的解决方案。

如何用我实际的 LocationButton 添加一个 FloatingButton

编辑: 这是我的 ButtonLocation

 override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap //Princiapal Map Variable
        mMap.setOnMarkerClickListener(this) //Location Marker
        mMap.uiSettings.isZoomControlsEnabled = true //Zoom in maps enabled
        mMap.uiSettings.isMyLocationButtonEnabled = true

        setUpMap() //Function to detect actual location
    }

编辑图像:

这是我的真实 Layout mockup with This .xml。但是现在我遇到了 Toolbar Widget.

的问题

你那里已经有东西了。 红色浮动按钮在地图上方,这就是您想要的。 要查看 Google 的位置按钮(通常在右上角),您需要发出:

mMap.setMyLocationEnabled(true);
mMap.getUiSettings().setMyLocationButtonEnabled(true);

编辑:对于 kotlin,使用以下代码段:

override fun onMapReady(googleMap: GoogleMap) {
  mMap = googleMap

  this.setUpMap()
}

companion object {
  private const val LOCATION_PERMISSION_REQUEST_CODE = 1
}

private fun setUpMap() {

  if (ActivityCompat.checkSelfPermission(this,
      android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this,
      arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION), LOCATION_PERMISSION_REQUEST_CODE)
    return
  }

  mMap.isMyLocationEnabled = true
}

override fun onRequestPermissionsResult(requestCode: Int,
                                        permissions: Array<String>, grantResults: IntArray) {
  when (requestCode) {
    LOCATION_PERMISSION_REQUEST_CODE -> {
      // If request is cancelled, the result arrays are empty.
      if ((grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
        // permission was granted, yay! Do the task you need to do.
        setUpMap()
      } else {
        // permission denied, boo!
      }
      return
    }
    else -> {
      // Ignore all other requests.
    }
  }
}