我可以将 MapActivity 放在 Scrollview 中吗?
Can I put a MapActivity inside a Scrollview?
我正在尝试在 ScrollView
页面中使用 MapActivity
。当我 运行 应用程序对其进行测试时,无法正确单击地图,因为当用户尝试在地图上滑动时,滚动视图会接管并且有点难以在其上滑动。
这是它的外观(地图包含在最底部):
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CreateAds.FurnitureAd.CreateFunP1Fragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/lll"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/ad_title"
android:inputType="textPersonName"
android:textColor="@color/colorPrimary"
tools:layout_editor_absoluteX="182dp"
tools:layout_editor_absoluteY="16dp"
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/rrr"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/lll"
app:layout_constraintStart_toStartOf="@+id/lll"
app:layout_constraintTop_toBottomOf="@+id/lll">
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:ems="10"
android:hint="@string/offer_price"
android:inputType="number"
android:textColor="@color/colorPrimary"
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/textView16"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/currency"
android:textColor="@color/colorPrimary"
app:layout_constraintStart_toStartOf="@+id/spinner2"
app:layout_constraintTop_toBottomOf="@+id/rrr" />
<Spinner
android:id="@+id/spinner2"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/rrr"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/rrr"
app:layout_constraintTop_toBottomOf="@+id/textView16" />
<TextView
android:id="@+id/textView18"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/state"
android:textColor="@color/colorPrimary"
app:layout_constraintStart_toStartOf="@+id/spinner2"
app:layout_constraintTop_toBottomOf="@+id/spinner2" />
<Spinner
android:id="@+id/spinner3"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/spinner2"
app:layout_constraintStart_toStartOf="@+id/spinner2"
app:layout_constraintTop_toBottomOf="@+id/textView18" />
<TextView
android:id="@+id/textView20"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/city"
android:textColor="@color/colorPrimary"
app:layout_constraintStart_toStartOf="@+id/spinner3"
app:layout_constraintTop_toBottomOf="@+id/spinner3" />
<Spinner
android:id="@+id/spinner4"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/spinner3"
app:layout_constraintStart_toStartOf="@+id/spinner3"
app:layout_constraintTop_toBottomOf="@+id/textView20" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/spinner4"
app:layout_constraintStart_toStartOf="@+id/spinner4"
app:layout_constraintTop_toBottomOf="@+id/spinner4">
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="@string/location"
android:inputType="text"
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/textView24"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/map"
android:textColor="@color/colorPrimary"
app:layout_constraintStart_toStartOf="@+id/textInputLayout"
app:layout_constraintTop_toBottomOf="@+id/textInputLayout" />
<include
layout="@layout/activity_maps"
android:layout_width="0dp"
android:layout_height="450dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView24" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
这样实现是不是错了?
当您希望地图成为您 activity 上的主要内容并且几乎是唯一的内容时,可以使用地图活动。请改用 MapFragment
。示例:
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
我们在这个场景中所做的是首先向地图添加一些 margin/padding 以便用户可以在其侧面滚动。
但后来我们决定最好将 ScrollView 中的地图设置为非交互式地图,并在其顶部设置一个不可见的按钮,当用户点击该按钮时,会打开一个新的 activity 地图最大化。并且在那个新的activity中没有滚动,用户只能与地图交互或返回。
加载地图的片段是相同的,所以地图的代码是共享的,它只是放置在两个不同的布局中(在没有启用交互的滚动视图中和在新的 activity 中)。
我正在尝试在 ScrollView
页面中使用 MapActivity
。当我 运行 应用程序对其进行测试时,无法正确单击地图,因为当用户尝试在地图上滑动时,滚动视图会接管并且有点难以在其上滑动。
这是它的外观(地图包含在最底部):
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CreateAds.FurnitureAd.CreateFunP1Fragment">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/lll"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:hint="@string/ad_title"
android:inputType="textPersonName"
android:textColor="@color/colorPrimary"
tools:layout_editor_absoluteX="182dp"
tools:layout_editor_absoluteY="16dp"
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/rrr"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/lll"
app:layout_constraintStart_toStartOf="@+id/lll"
app:layout_constraintTop_toBottomOf="@+id/lll">
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:ems="10"
android:hint="@string/offer_price"
android:inputType="number"
android:textColor="@color/colorPrimary"
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/textView16"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/currency"
android:textColor="@color/colorPrimary"
app:layout_constraintStart_toStartOf="@+id/spinner2"
app:layout_constraintTop_toBottomOf="@+id/rrr" />
<Spinner
android:id="@+id/spinner2"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/rrr"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="@+id/rrr"
app:layout_constraintTop_toBottomOf="@+id/textView16" />
<TextView
android:id="@+id/textView18"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/state"
android:textColor="@color/colorPrimary"
app:layout_constraintStart_toStartOf="@+id/spinner2"
app:layout_constraintTop_toBottomOf="@+id/spinner2" />
<Spinner
android:id="@+id/spinner3"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/spinner2"
app:layout_constraintStart_toStartOf="@+id/spinner2"
app:layout_constraintTop_toBottomOf="@+id/textView18" />
<TextView
android:id="@+id/textView20"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/city"
android:textColor="@color/colorPrimary"
app:layout_constraintStart_toStartOf="@+id/spinner3"
app:layout_constraintTop_toBottomOf="@+id/spinner3" />
<Spinner
android:id="@+id/spinner4"
style="@style/Widget.AppCompat.Spinner.Underlined"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/spinner3"
app:layout_constraintStart_toStartOf="@+id/spinner3"
app:layout_constraintTop_toBottomOf="@+id/textView20" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/textInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="@+id/spinner4"
app:layout_constraintStart_toStartOf="@+id/spinner4"
app:layout_constraintTop_toBottomOf="@+id/spinner4">
<EditText
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="@string/location"
android:inputType="text"
android:importantForAutofill="no" />
</com.google.android.material.textfield.TextInputLayout>
<TextView
android:id="@+id/textView24"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/map"
android:textColor="@color/colorPrimary"
app:layout_constraintStart_toStartOf="@+id/textInputLayout"
app:layout_constraintTop_toBottomOf="@+id/textInputLayout" />
<include
layout="@layout/activity_maps"
android:layout_width="0dp"
android:layout_height="450dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView24" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
这样实现是不是错了?
当您希望地图成为您 activity 上的主要内容并且几乎是唯一的内容时,可以使用地图活动。请改用 MapFragment
。示例:
<fragment
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"/>
我们在这个场景中所做的是首先向地图添加一些 margin/padding 以便用户可以在其侧面滚动。
但后来我们决定最好将 ScrollView 中的地图设置为非交互式地图,并在其顶部设置一个不可见的按钮,当用户点击该按钮时,会打开一个新的 activity 地图最大化。并且在那个新的activity中没有滚动,用户只能与地图交互或返回。
加载地图的片段是相同的,所以地图的代码是共享的,它只是放置在两个不同的布局中(在没有启用交互的滚动视图中和在新的 activity 中)。