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 中搜索了很多示例,我看到有人使用 RelativeLayout
将 FloatingButton
放在主要内容中。我决定更改为 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.
}
}
}
我正在尝试创建一个地图应用程序,它可以获取您的位置并同时保存您的标记。
但是我在尝试同时添加 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 中搜索了很多示例,我看到有人使用 RelativeLayout
将 FloatingButton
放在主要内容中。我决定更改为 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.
}
}
}