What is Toolbar?
How to create an online Book Store App using jetpack compose
What is Collapsing Toolbar?
Top App Bar
- Top App Bar
- Centered Aligned Top App Bar
- Medium Top App Bar
- Large Top App Bar
Also Read How to create Divider in Jetpack Compose
Key Concepts
1. Annotations
- @SuppressLint("UnusedMaterial3ScaffoldPaddingParameter"): Suppresses warnings related to padding parameters in Scaffold.
- @OptIn(ExperimentalMaterial3Api::class): Allows the use of APIs that are experimental in the Material3 library.
2. Scroll Behavior
- TopAppBarDefaults.enterAlwaysScrollBehavior(): Configures the toolbar to react to scroll gestures. For example, it hides or reveals the toolbar as you scroll.
3. Scaffold
- modifier:
- topBar:
MediumTopAppBar(
title = { Text(text = "Collapsing Tool Bar") },
navigationIcon = {
IconButton(onClick = { /*TODO*/ }) {
Icon(imageVector = Icons.Default.Menu, contentDescription = "")
}
},
scrollBehavior = scrollBehavior
)
- Creates a medium-sized app bar with:
- Title: Displays "Collapsing Tool Bar."
- Navigation Icon: A menu icon (default Material Icon).
- Scroll Behavior: Enables the collapsing toolbar effect.
- content:
content = { innerPadding ->
Column(
modifier = Modifier
.fillMaxWidth()
.padding(12.dp)
.padding(innerPadding)
.verticalScroll(rememberScrollState())
) {
Text(
modifier = Modifier.padding(8.dp),
text = stringResource(id = R.string.contents)
)
}
}- Defines the content of the screen.
- Uses a Column to arrange child views vertically.
- fillMaxWidth(): Makes the Column take up the full screen width.
- padding(12.dp): Adds 12dp padding around the content.
- padding(innerPadding): Adds additional padding to avoid overlapping with system UI.
- verticalScroll(rememberScrollState()): Makes the content scrollable vertically.
- Child Content:
Text(
modifier = Modifier.padding(8.dp),
text = stringResource(id = R.string.contents)
)- Displays text using the string resource R.string.contents.
Collapsing Behavior
Full Code
Steps:
R.string.contents.MainActivity
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
JetpackComposeSkillTheme {
Collapsing()
}
}
}
}Collapsing
package com.codingbihar.jetpackcomposeskill
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MediumTopAppBar
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Collapsing() {
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
Scaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
MediumTopAppBar(
title = { Text(
// color = Color.Red,
text = "Collapsing Tool Bar") },
navigationIcon = {
IconButton(onClick = { /*TODO*/ }) {
Icon(imageVector = Icons.Default.Menu,
contentDescription = "")
}
},
scrollBehavior = scrollBehavior
)
},
content =
{ innerPadding ->
Column(
modifier = Modifier
.fillMaxWidth()
.padding(12.dp)
.padding(innerPadding)
.verticalScroll(rememberScrollState())
) {
Text(
modifier = Modifier.padding(8.dp),
text = stringResource(id = R.string.contents)
)
}
}
)
}

.png)



