android-fragments 添加工具栏和抽屉式菜单到Android谷歌Map活动

lsmepo6l  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(189)

我已经在Android Studio的应用程序中创建了一个标准的谷歌Map活动,Map的工作效果如预期。
我的Activity名为“NativeMap”,然后Activity启动,我在Activity顶部看到一个工具栏/应用程序栏,文本为“NativeMap”。
Activity的布局文件是标准的,并调用一个Map片段:

<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".NativeMap">

</androidx.fragment.app.FragmentContainerView>

因此,XML中没有定义toolbar供我引用或自定义...
这个活动的onCreate看起来也很简单,所以我只能再次假设背景中包含了很多东西。

// public class NativeMap extends FragmentActivity implements OnMapReadyCallback {
public class NativeMap extends AppCompatActivity implements OnMapReadyCallback {

    private static final String TAG = NativeMap.class.getSimpleName();

    private GoogleMap mMap;
    private ActivityNativeMapBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityNativeMapBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        if (mapFragment != null) mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}

(Note我已经将这个类转换为扩展AppCompatActivity,以使条形图显示在顶部,当它扩展FragmentActivity时,顶部条形图根本不显示。)
如何访问此工具栏或将其替换为标准工具栏。
我还想在这个活动中添加一个抽屉菜单,但是通过这个片段包含,所有的东西看起来都很抽象,我不知道如何添加。
我已经在谷歌上搜索了大约一个星期了,找不到任何东西,甚至似乎指出我在这个正确的方向。

pzfprimi

pzfprimi1#

我想出来了
androidx.fragment.app.FragmentContainerView只能包含片段,因此需要更改布局中的基本容器。
我把它改成了<androidx.drawerlayout.widget.DrawerLayout,以允许包含主菜单抽屉。(在下面的树视图中称为“_drawer”)
DrawerLayout中,我添加了一个androidx.constraintlayout.widget.ConstraintLayout来包含主要的布局组件,包括Map片段和工具栏。(约束布局在下面的树视图中称为“mainLayout”)
然后将工具栏添加到com.google.android.material.appbar.AppBarLayout中。
然后将图谱片段添加到AppBarLayout下面的<fragment>标记中。
这和预期的一样有效。

布局XML现在如下所示:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout 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:id="@+id/_drawer"
    android:animateLayoutChanges="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/mainLayout"
        android:animateLayoutChanges="true"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <com.google.android.material.appbar.AppBarLayout
            android:id="@+id/appBarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay"
            app:layout_constraintTop_toTopOf="parent">

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:popupTheme="@style/AppTheme.PopupOverlay">

                <androidx.appcompat.widget.AppCompatImageView
                    android:id="@+id/top_logo"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:contentDescription="@string/app_logo"
                    app:srcCompat="@drawable/ic_app_top_logo" />

            </androidx.appcompat.widget.Toolbar>
        </com.google.android.material.appbar.AppBarLayout>

        <fragment
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/appBarLayout"
            tools:context=".NativeMap" />

    </androidx.constraintlayout.widget.ConstraintLayout>

    <LinearLayout
        android:id="@+id/_nav_view"
        android:layout_width="320dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="#EEEEEE">

        <include
            android:id="@+id/drawerMenu"
            layout="@layout/drawer_main" />
    </LinearLayout>
</androidx.drawerlayout.widget.DrawerLayout>

相关问题