支持 Action Bar 仅在一个片段中可见

Support Action Bar visible only in one fragment

我的应用程序由 MainActivity 和 2 个片段组成。 MainActivity 作为导航宿主。

在我的应用程序中,我禁用了全局 ActionBar,而是在 MainFragment 中设置了自己的 ActionBar

    val toolbar: Toolbar = v.findViewById(R.id.toolbar)
    (activity as AppCompatActivity).setSupportActionBar(toolbar)

此片段的 XML 文件中也包含工具栏:

<include
    android:id="@+id/include"
    layout="@layout/toolbar_main"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

问题是当我转到其他片段的屏幕时工具栏没有显示。

主要活动XML

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:fitsSystemWindows="true"
    tools:context=".MainActivity"
    android:orientation="vertical">

    
    <fragment
        android:id="@+id/fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />
    
</LinearLayout>

问题出在哪里?

操作栏仅在一个片段中可见,因为我假设您仅在一个片段中对其进行膨胀。如果您希望自定义工具栏膨胀一次并出现在所有片段中,则在基础 activity

中膨胀工具栏

所以请尝试以下操作,

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:fitsSystemWindows="true"
    tools:context=".MainActivity"
    android:orientation="vertical">

<!-- Add your custom toobar here -->
    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"/>

    <fragment
        android:id="@+id/fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />
    
</LinearLayout>

MainActivity.kt

private lateinit var toolbar: Toolbar

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_main)

  toolbar = findViewById<Toolbar>(R.id.toolbar)
  setSupportActionBar(toolbar)

 // rest of your logic
}