支持 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
}
我的应用程序由 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
}