编辑: 我找到了解决方案。我创建了一个单独的活动,包括该活动内的另一个工具栏。然后,我创建了第二个导航图,并将其添加到第二个活动中。我使用了与我的MainActivity相同的方法,使用NavController设置了第二个工具栏。就像我想要的一样!
我正在将新的导航组件与应用程序中的单个“活动”方法一起使用。我想为每个Fragment设置ToolBar样式,以保持导航控制器功能(如导航和标题)。
最初,我尝试搜索如何使用其他主题为Fragments充气。我拒绝了这个主意,因为
它没有真正起作用
我只需要为工具栏设置主题。 URL
我发现这个与Kotlin兼容的项目。但是,它使用的BottomNavigation在我的应用程序中不存在。 https://android.jlelse.eu/a-quick-glance-on-single-activity-approach-with-navigation-component-f3b96b3b0a58
来自该项目:
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/fragHost"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:defaultNavHost="true" />
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:orientation="horizontal"
android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation" />
</android.support.constraint.ConstraintLayout>
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
navigation.setupWithNavController(findNavController(R.id.fragHost))
}
override fun onSupportNavigateUp() = findNavController(R.id.fragHost).navigateUp()
FirstFragment.kt
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
collapsingToolbar.setupWithNavController(toolbar, findNavController())
}
SecondFragment.kt
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
changeStatusBarColor(R.color.colorBlue)
return inflater.inflate(R.layout.fragment_second, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
toolbar.setupWithNavController(findNavController())
}
override fun onDestroyView() {
super.onDestroyView()
changeStatusBarColor(R.color.colorPrimaryDark)
}
private fun changeStatusBarColor(colorResId: Int) {
activity?.window?.statusBarColor = ContextCompat.getColor(context!!, colorResId)
}
到目前为止,我已经能够在MainActivity中找到如何使用工具栏设置导航控制器的方法。这允许正确的向上导航操作,但不允许自定义主题。参考:https://developer.android.com/guide/navigation/navigation-ui#top_app_bar
在MainActivity.java中,我做了以下
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Toolbar toolbar = findViewById(R.id.toolbar);
final int[] topDestination = { R.id.loginFragment, R.id.mainFragment };
AppBarConfiguration.Builder abcBuiler = new AppBarConfiguration.Builder(topDestination);
AppBarConfiguration abc = abcBuiler.build();
NavController navController = Navigation.findNavController(this, R.id.fragHost);
// Set up navigation controller toolbar
NavigationUI.setupWithNavController(toolbar, navController, abc);
}
toolbar.setupWithNavController(findNavController())函数在Java中不存在,或者至少我找不到它。
NavigationUI.setupWithNavController(toolbar,navController,AppBarConfiguration);一次在MainActivity中设置了工具栏,而我找不到在片段中对其主题化的方法。