这是我的activity_main.xml,右边有一个基本的Toolbar和两个Button(还有一个NavigationView):

    <?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:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/mxhbg"
        android:id="@+id/drawer_layout"
        android:fitsSystemWindows="true"
        tools:context="com.myapp.MainActivity"
        tools:openDrawer="start">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/mxhbg"
            android:orientation="vertical"
            android:keepScreenOn="true"
            android:weightSum="10">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="54dp"
                android:orientation="horizontal">

                <androidx.appcompat.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    android:background="@color/colorPrimary"
                    android:elevation="4dp"
                    android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

                    <Button
                        android:id="@+id/btnRandom"
                        android:layout_width="30dp"
                        android:layout_height="30dp"
                        android:layout_alignParentEnd="true"
                        android:layout_centerVertical="true"
                        android:layout_gravity="end"
                        android:layout_marginEnd="16dp"
                        android:background="@drawable/ic_shuffle">

                    </Button>

                    <Button
                        android:id="@+id/btnRescanSongs"
                        android:layout_width="30dp"
                        android:layout_height="30dp"
                        android:layout_alignParentEnd="true"
                        android:layout_centerVertical="true"
                        android:layout_gravity="end"
                        android:layout_marginEnd="16dp"
                        android:background="@android:drawable/stat_notify_sync">

                    </Button>
                </androidx.appcompat.widget.Toolbar>

            </LinearLayout>

            // other stuff
            
        </LinearLayout>

        <com.google.android.material.navigation.NavigationView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:id="@+id/nav_view"
            app:headerLayout="@layout/nav_header"
            app:menu="@menu/drawer_menu">

        </com.google.android.material.navigation.NavigationView>

    </androidx.drawerlayout.widget.DrawerLayout>

我在MainActivity上这样设置:

setContentView(R.layout.activity_main);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

现在,在另一个Activity(SyncActivity)上,我想显示相同的Toolbar,但右边有不同的图标.

正确的方法是什么?

activity_sync.xml秒内执行此操作:

    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout 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"
        android:background="@drawable/mxhbg"
        tools:context=".SyncActivity">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/mxhbg"
            android:orientation="vertical"
            android:keepScreenOn="true"
            android:weightSum="10">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="54dp"
                android:orientation="horizontal">

                <androidx.appcompat.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="?attr/actionBarSize"
                    android:background="@color/colorPrimary"
                    android:elevation="4dp"
                    android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

                    <Button
                        android:id="@+id/btnRescanSongs"
                        android:layout_width="30dp"
                        android:layout_height="30dp"
                        android:layout_alignParentEnd="true"
                        android:layout_centerVertical="true"
                        android:layout_gravity="end"
                        android:layout_marginEnd="16dp"
                        android:background="@android:drawable/stat_notify_sync">

                    </Button>
                </androidx.appcompat.widget.Toolbar>

            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="9">

                <ListView
                    android:id="@+id/log"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:divider="@android:color/transparent"
                    android:dividerHeight="10.0sp"
                    android:padding="8dp">

                </ListView>

            </LinearLayout>
        </LinearLayout>

    </androidx.constraintlayout.widget.ConstraintLayout>

在SyncActivity上:

    setContentView(R.layout.activity_sync);
    Objects.requireNonNull(getSupportActionBar()).setTitle("Sync");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);

它在主条目的下面增加了一个新的Toolbar个.

另外:为什么主Toolbar上的图标不显示在其他Activity上?似乎隐藏了他们?为什么?

推荐答案

您可以从布局xml中删除所有工具栏按钮,然后将它们移动到菜单xml中.

文件:res/menu/yourmenuname.xml文件:res/menu/yourmenuname.xml

<menu
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/menu_random"
        android:icon="@android:drawable/stat_notify_sync"
        android:title="@string/menu_rescan_songs"
        app:showAsAction="always"/>
    <item
        android:id="@+id/menu_rescan_songs"
        android:icon="@android:drawable/stat_notify_sync"
        android:title="@string/menu_rescan_songs"
        app:showAsAction="always"/>

</menu>

请注意,您还必须提供一个标题,而不仅仅是图标,您可以使用showAsAction与always始终显示图标或ifRoomifRoom|withText只是实验什么最喜欢你.

然后,在每个Activity中,你重写这个函数来加载菜单.注意yourmenuname个在每个活动中会有所不同.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   getMenuInflater().inflate(R.menu.yourmenuname,menu);
   return super.onCreateOptionsMenu(menu);
}

要处理菜单操作,请使用用途:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.menu_random:
            doSomethingElse();
            return true;
        case R.id.menu_rescan_songs:
            doSomething();
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

在第二个活动中,使用不同的菜单和不同的选项,并以类似的方式进行处理和创建.

你可以用菜单做很多事情,在这里添加一些链接,可能会帮助你继续阅读它们:

Android相关问答推荐

当我的Log.i()不在主线程中时,如何在我的logcat中显示它?

无法在Jetpack Compose中显示Admob原生广告

如何将Unicode符号作为文本居中放置在布局中的按钮(Android XML)中?

在带有REACT-Native-CLI的开发和生产中使用Firebase的最佳实践

DocumentFile.canWrite()、DocumentFile.Existes()-使用本地内置手机存储(而不是云)时性能较差(占用太多CPU时间)

我们可以使用KSP读取类中变量的值吗?

未解析的引用:视图模型

如何在 compose 中使用可变对象?

从 Jetpack Compose 中的图像中删除默认高度

块不起作用,出现 "只有安全的 (?.)... " 错误

如何在 Jetpack Compose 中创建无限pager

使用 Dagger Hilt 获取接口的所有实例

在 Jetpack Compose 中使用 ViewModel 实现 startActivity 的最佳实践

根据 Jetpack Compose 中的生命周期正确处理变量/函数

自定义 Recyclerview [Android & Kotlin]

firebase-messaging和firebase-inappmessaging-display之间有什么区别?

如何在jetpack compose中创建自定义rememberState?

Android Studio:如何添加应用程序质量洞察窗口以查看 Android Studio 中的 Crashlytics 数据?

Сan 无法从 Firestore 获取数据,没有错误

如何从构建的流对象中发出值