导航组件透明工具栏
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>
有没有办法为包含我所有片段的主要 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>