【问题标题】:NavigationComponent cannot change ActionBar color导航组件无法更改 ActionBar 颜色
【发布时间】:2021-06-09 05:44:00
【问题描述】:

我正在使用Navigation Component 在 2 个不同的片段之间进行路由。但是,我未能更改第二个片段的 ActionBar 颜色,我不知道为什么。下面是我的代码。

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setHasOptionsMenu(true)
        
    activity?.window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
    activity?.window?.statusBarColor = Color.WHITE

    actionBar = (activity as AppCompatActivity).supportActionBar

    actionBar?.title = chatViewModel.roomName
    actionBar?.setBackgroundDrawable(ColorDrawable(Color.WHITE)) <-- already set actionBar's color here

}

然后,我去布局检查员检查整个布局。我发现只有action_bar_container 改变了它的颜色,而不是action_bar 本身。关于如何解决这个问题的任何想法?

【问题讨论】:

  • 你想只改变第二个片段的工具栏颜色而不改变第一个片段的工具栏颜色吗?
  • 是的,只有第二个片段的工具栏颜色

标签: android android-architecture-navigation


【解决方案1】:

为了单独自定义每个片段的工具栏,我创建了一个自定义工具栏并在每个片段的布局中使用它。

common_toolbar.xml

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">

<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/const_item"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize">

        <TextView
            android:id="@+id/back_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_centerVertical="true"
            android:layout_gravity="center_vertical"
            android:layout_marginStart="@dimen/margin_normal"
            android:gravity="center"
            android:padding="@dimen/padding_five"
            android:text="Back"
            android:textColor="@android:color/white"
            android:textSize="@dimen/font_size_fifteen"
            app:drawableStartCompat="@drawable/ic_action_chevron_left"
            app:drawableTint="@android:color/white"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/title_toolbar"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_centerHorizontal="true"
            android:gravity="center"
            android:text="@string/menu"
            android:textColor="@android:color/white"
            android:textSize="@dimen/font_size_fifteen"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />
        
    </androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.appbar.AppBarLayout>
然后将其添加到 Fragment 的 UI。比方说,添加到 fragment_user_details.xml
<layout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <include layout="@layout/toolbar_common"
        android:id="@+id/toolbar_user_details"/>
    <!-- 
     Other View widgets
     -->
</androidx.constraintlayout.widget.ConstraintLayout>
由于每个片段都有自己的工具栏,所以我通过它的 id 获取它并根据我的要求进行自定义。确保 Activity 具有 `Theme.MaterialComponents.Light.NoActionBar` 主题。

【讨论】:

  • 自定义工具栏可以有onCreateOptionMenu吗?因为我正在使用它来进行菜单项操作。
  • 感谢您的解释。我昨天整天都在努力实现这个自定义样式的自定义工具栏,现在它可以工作了!
猜你喜欢
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多