Android:GoogleMaps 标记详细信息片段
Android: GoogleMaps marker details fragment
我是 Android 的初学者,我正在尝试实现类似于 Google 地图应用程序的功能。当我按下一个标记时,我想要一个包含详细信息的新片段出现在我的 SupportMapFragment
之上,如下所示:
我怎样才能做到这一点?
这是该片段的默认布局吗?
这甚至是一个片段还是只是一个修改过的信息window?
是的,你可以使用这个库轻松实现它,它在最小化和拉伸时支持 2 种布局,我在 google 地图应用程序之后实现了类似的行为,如获取如下数据并将其设置在布局中
示例用法为
<com.sothree.slidinguppanel.SlidingUpPanelLayout
xmlns:sothree="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
sothree:umanoPanelHeight="68dp"
sothree:umanoShadowHeight="4dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Main Content"
android:textSize="16sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|top"
android:text="The Awesome Sliding Up Panel"
android:textSize="16sp" />
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
我明白了。我需要的是一个 Bottom Sheet Dialog。这是我用作灵感来源的非常 useful guide。
第 1 步
在 `app.gradle` 中实现 Material 组件库:
implementation 'com.google.android.material:material:1.3.0'
第 2 步
在 res->layout 中创建您选择的布局。我的看起来像这样:
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="bottom">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Rent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
布局底部对齐。
第 3 步
定义一个实例化 BottomSheetDialog 的方法:
private void showBottomSheetDialog() {
final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(getContext());
bottomSheetDialog.setContentView(R.layout.MY_LAYOUT_NAME);
AppCompatButton btn = bottomSheetDialog.findViewById(R.id.btn_view);
bottomSheetDialog.show();
}
第 4 步
这一步是额外的,如果您想了解如何通过按 GoogleMap 标记来调用 BottomSheetDialog。
确保处理 MapSupportFragment 的 class 实现 OnMapReadyCallback
、GoogleMap.OnMarkerClickListener
和(如果您需要标记簇)ClusterManager.OnClusterItemClickListener
。覆盖必要的方法:
@Override
public boolean onMarkerClick(Marker marker) {
showBottomSheetDialog();
return false;
}
如果你需要集群,在@onMapReady()中不要忘记添加:
map.setOnCameraIdleListener(clusterManager);
map.setOnMarkerClickListener(clusterManager);
clusterManager.setOnClusterItemClickListener(this);
瞧!
我是 Android 的初学者,我正在尝试实现类似于 Google 地图应用程序的功能。当我按下一个标记时,我想要一个包含详细信息的新片段出现在我的 SupportMapFragment
之上,如下所示:
我怎样才能做到这一点?
这是该片段的默认布局吗?
这甚至是一个片段还是只是一个修改过的信息window?
是的,你可以使用这个库轻松实现它,它在最小化和拉伸时支持 2 种布局,我在 google 地图应用程序之后实现了类似的行为,如获取如下数据并将其设置在布局中
示例用法为
<com.sothree.slidinguppanel.SlidingUpPanelLayout
xmlns:sothree="http://schemas.android.com/apk/res-auto"
android:id="@+id/sliding_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
sothree:umanoPanelHeight="68dp"
sothree:umanoShadowHeight="4dp">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Main Content"
android:textSize="16sp" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center|top"
android:text="The Awesome Sliding Up Panel"
android:textSize="16sp" />
</com.sothree.slidinguppanel.SlidingUpPanelLayout>
我明白了。我需要的是一个 Bottom Sheet Dialog。这是我用作灵感来源的非常 useful guide。
第 1 步
在 `app.gradle` 中实现 Material 组件库:implementation 'com.google.android.material:material:1.3.0'
第 2 步
在 res->layout 中创建您选择的布局。我的看起来像这样:<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="bottom">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Rent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
布局底部对齐。
第 3 步
定义一个实例化 BottomSheetDialog 的方法:private void showBottomSheetDialog() {
final BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(getContext());
bottomSheetDialog.setContentView(R.layout.MY_LAYOUT_NAME);
AppCompatButton btn = bottomSheetDialog.findViewById(R.id.btn_view);
bottomSheetDialog.show();
}
第 4 步
这一步是额外的,如果您想了解如何通过按 GoogleMap 标记来调用 BottomSheetDialog。确保处理 MapSupportFragment 的 class 实现 OnMapReadyCallback
、GoogleMap.OnMarkerClickListener
和(如果您需要标记簇)ClusterManager.OnClusterItemClickListener
。覆盖必要的方法:
@Override
public boolean onMarkerClick(Marker marker) {
showBottomSheetDialog();
return false;
}
如果你需要集群,在@onMapReady()中不要忘记添加:
map.setOnCameraIdleListener(clusterManager);
map.setOnMarkerClickListener(clusterManager);
clusterManager.setOnClusterItemClickListener(this);
瞧!