导航组件透明工具栏

NavigationComponents Transparent toolbar

有没有办法为包含我所有片段的主要 activity 设置透明工具栏?

我需要在其他片段中显示工具栏,但在主要主机中activity我希望它是透明的,带有按钮而不是彩色的

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val navController = Navigation.findNavController(this, R.id.nav_host_fragment)
        setupActionBar(navController)
    }

    private fun setupActionBar(navController: NavController) {
        NavigationUI.setupActionBarWithNavController(this, navController)
    }

    override fun onSupportNavigateUp(): Boolean {
        return Navigation.findNavController(this, R.id.nav_host_fragment).navigateUp()
                || super.onSupportNavigateUp()
    }

    override fun onCreateOptionsMenu(menu: Menu?): Boolean {
        MenuInflater(this).inflate(R.menu.menu, menu)
        menu!!.findItem(R.id.eventFragment)?.isVisible = false
        return super.onCreateOptionsMenu(menu)
    }
}

从这里开始,我想知道是否可以仅在此 activity

中使我的工具栏透明

我已经搜索过,但没有找到关于导航组件的任何信息

通过在 MainActivity 上使用 NavController 的 addOnDestinationChangedListener 方法,您可以为依赖于 NavHostFragment 的每个片段设置工具栏颜色。你可能有类似的东西:

navController.addOnDestinationChangedListener { _, destination: NavDestination, _ ->
        when (destination.id) {
            R.id.feedFragment -> { setToolbarColor(R.color.white) }
            R.id.infoFragment -> { setToolbarColor(R.color.transparent)}}}


private fun setToolbarColor(colorId : Int){
    supportActionBar!!.setBackgroundDrawable(ColorDrawable(ContextCompat.getColor(this, colorId)))
}

我想找到一种更简洁的方法来做到这一点,但这是在尝试不同方法后对我有用的第一种方法。

处理 Action Bars/Toolbars 的最佳方法是使用 Theme.NoActionBar 然后自己创建一个并将背景颜色设置为透明。

这朵云看起来像这样:

<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"
tools:context=".ui.settings.SettingsActivity">

<com.google.android.material.appbar.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <com.google.android.material.appbar.MaterialToolbar
        android:id="@+id/settingsToolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@android:color/transparent" />

</com.google.android.material.appbar.AppBarLayout>

<fragment
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_margin="10dp"
    app:defaultNavHost="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_bias="1.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/appBarLayout"
    app:navGraph="@navigation/settings_navigation" />

透明工具栏

 <?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/toolbar_root"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:background="@drawable/background_toolbar_translucent">

    <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="@dimen/_20sdp"
            android:gravity="center_vertical">
        <ImageView
                android:id="@+id/back_toolbar"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:paddingBottom="@dimen/_10sdp"
                android:paddingRight="@dimen/_10sdp"
                android:paddingTop="@dimen/_10sdp"
                android:visibility="visible"
                android:src="@mipmap/ic_menu"/>

        <TextView
                android:id="@+id/txtToolbarDate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_centerVertical="true"
                android:gravity="center"
                android:layout_centerHorizontal="true"
                android:maxLines="1"
                android:padding="@dimen/_10sdp"
                android:text="August 8"
                android:fontFamily="@font/questrial_regular"
                android:drawableTint="@color/colorBlack"
                android:drawableRight="@drawable/ccp_ic_arrow_drop_down"
                android:textSize="@dimen/_15sdp"
                android:textColor="@color/colorBlack"
                android:visibility="visible"
                android:layout_marginLeft="0dp"
                android:layout_marginStart="0dp"
        />

        <RelativeLayout
                android:id="@+id/notification_view_holder"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginRight="@dimen/_5sdp">
            <ImageView android:id="@+id/addCaseBtnHome"
                    android:layout_width="wrap_content"
                       android:layout_height="wrap_content"
                       android:layout_marginRight="@dimen/_7sdp"
                       android:layout_marginTop="@dimen/_6sdp"
                       android:src="@mipmap/ic_add_button_station"/>

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

使用这个 drawable xml 作为背景

    <?xml version="1.0" encoding="utf-8"?>

<shape
        xmlns:android="http://schemas.android.com/apk/res/android">

    <gradient
            android:angle="270"
            android:endColor="@android:color/transparent"
            android:startColor="@color/black_alpha_40"/>
</shape>