活动的中间区域显示Google地图

4
我正在使用Android Studio 2.1.2。我查看了许多问题,大多数答案都针对旧版本的Android Studio和一些不适用于我的情况的旧类。
从文件>新建项目>我选择了Google Maps Activity选项。我没有改变其中任何默认代码。其XML具有一个Fragment。现在,通过Fragment的方式将此Activity直接引入到另一个Activity中是否可行?基本上,我正在构建一个应用程序,该应用程序在屏幕的中间部分显示地图。我希望这个中间位置可以是一个Fragment。底部和顶部区域有一些用于用户交互的组件。
我并不想让地图在一个新的Activity中出现,而是希望它保留在特定Activity的中间部分。
或者我只需向默认的Google Maps Activity添加新的UI组件。
起初,我考虑创建一个Fragment(具有自己的.java文件、XML布局),然后将地图代码放在其中,并将其移至我想要的Activity中。最好的方法是什么?感谢您的任何帮助。

你使用了标准的Google地图活动模板... 随意进行修改。或者从头开始。你遇到了什么问题? - OneCricketeer
我的问题是我不想从头开始,因为我已经有一个工作的Activity,只需要在中间加上一个地图,它是主Activity。我还想在其中实现生命周期回调。后来我创建了一个Google地图Activity,希望将其放置在那里。 - user3650467
我并不是指让你从头开始编写应用程序,而是创建一个空的XML和Java文件,然后开始将Google地图组件加载到其中。 - OneCricketeer
好的,听起来是个计划。我能把Google Maps Pieces放进一个Fragment里然后再引入吗?我知道Activities继承自Fragments的不同类。我的问题是,一个Fragment能否实现OnMapReadyCallback接口而没有问题? - user3650467
片段只是包含在活动中的简单内容。没有什么特别的。我相信回调应该可以正常工作。我个人没有使用过地图API,但我知道有一个名为SupportMapFragment的类,听起来像是你想要的。 - OneCricketeer
显示剩余9条评论
1个回答

12

我已经意识到,无论哪种方式都可以得到相同的结果,即在Activity中放置一个地图以及其他UI组件。无论是使用Google Maps Activity还是创建一个Empty Activity并将地图代码实现在其中。我的代码如下所示。我选择了一个Empty Activity(Android 2.1.2),然后将地图代码引入到.java文件中,并在活动的XML布局中使用标记将地图片段放置。

错误在于我使用了

android:name="com.google.android.gms.maps.MapFragment"

在XML布局中,将mapFragment(对象实例)声明并初始化为SupportMapFragment,这导致了混淆。这是因为我从Google文档中复制并粘贴代码时出现了问题。当我试图在这里更新我的帖子时,我发现了错误。正确的做法是,如果您正在使用MapFragment(API级别12及以上),则始终使用它。如果您决定使用SupportMapFragment(低于API级别12),则始终使用SupportMapFragment。

以下代码是更正内容,以防有人遇到相同的问题。

XML布局(activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.myapp.MainActivity">

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:orientation="horizontal">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/teachers_link"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/parent_link"
            android:layout_marginLeft="20dp" />

    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="340dp"
        android:orientation="vertical">
        <fragment xmlns:android="http://schemas.android.com/apk/res/android"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="135dp"
        android:layout_marginTop="12dp"
        android:orientation="vertical">
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/search_term" />
        <Spinner
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:layout_marginBottom="5dp"
            android:id="@+id/select_level"
            android:entries="@array/select_level"></Spinner>
        <Spinner
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/select_course"
            android:entries="@array/select_course"></Spinner>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/btn_search" />
    </LinearLayout>


</LinearLayout>

</ScrollView>

</LinearLayout>

Java文件(MainActivity.java)

package name;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;


public class MainActivity extends AppCompatActivity implements OnMapReadyCallback{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
}


@Override
public void onMapReady(GoogleMap map) {
    map.addMarker(new MarkerOptions()
            .position(new LatLng(0, 0))
            .title("Marker"));
}

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接