4.23 | 冲刺day05
以前用过jetpack compose,跟着官方文档的codelab 敲了敲,深入地学一学怎么用
@Composable
fun WellnessTaskItem(
taskName: String,
checked: Boolean,
onCheckedChange: (Boolean) -> Unit,
onClose: () -> Unit,
modifier: Modifier = Modifier
) {
Row(
modifier = modifier, verticalAlignment = Alignment.CenterVertically
) {
Text(
modifier = Modifier
.weight(1f)
.padding(start = 16.dp),
text = taskName
)
Checkbox(
checked = checked,
onCheckedChange = onCheckedChange
)
IconButton(onClick = onClose) {
Icon(Icons.Filled.Close, contentDescription = "Close")
}
}
}
@Composable
fun WellnessTaskItem(
taskName: String, onClose: () -> Unit, modifier: Modifier = Modifier
) {
var checkedState by rememberSaveable { mutableStateOf(false) }
WellnessTaskItem(
taskName = taskName,
checked = checkedState,
onCheckedChange = { newValue -> checkedState = newValue },
onClose = onClose,
modifier = modifier,
)
}
package com.example.basicscodelab import android.content.res.Configuration.UI_MODE_NIGHT_YES import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.animation.animateContentSize import androidx.compose.animation.core.Spring import androidx.compose.animation.core.spring import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.material.icons.Icons.Filled import androidx.compose.material.icons.filled.ExpandLess import androidx.compose.material.icons.filled.ExpandMore import androidx.compose.material3.Button import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.example.basicscodelab.ui.theme.BasicsCodelabTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { BasicsCodelabTheme { MyApp(modifier = Modifier.fillMaxSize()) } } } } @Composable fun MyApp(modifier: Modifier = Modifier) { var shouldShowOnboarding by rememberSaveable { mutableStateOf(true) } Surface(modifier, color = MaterialTheme.colorScheme.background) { if (shouldShowOnboarding) { OnboardingScreen(onContinueClicked = { shouldShowOnboarding = false }) } else { Greetings() } } } @Composable fun OnboardingScreen( onContinueClicked: () -> Unit, modifier: Modifier = Modifier ) { Column( modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Text("Welcome to the Basics Codelab!") Button( modifier = Modifier.padding(vertical = 24.dp), onClick = onContinueClicked ) { Text("Continue") } } } @Composable private fun Greetings( modifier: Modifier = Modifier, names: List<String> = List(1000) { "$it" } ) { LazyColumn(modifier = modifier.padding(vertical = 4.dp)) { items(items = names) { name -> Greeting(name = name) } } } @Composable private fun Greeting(name: String, modifier: Modifier = Modifier) { Card( colors = CardDefaults.cardColors( containerColor = MaterialTheme.colorScheme.primary ), modifier = modifier.padding(vertical = 4.dp, horizontal = 8.dp) ) { CardContent(name) } } @Composable private fun CardContent(name: String) { var expanded by rememberSaveable { mutableStateOf(false) } Row( modifier = Modifier .padding(12.dp) .animateContentSize( animationSpec = spring( dampingRatio = Spring.DampingRatioMediumBouncy, stiffness = Spring.StiffnessLow ) ) ) { Column( modifier = Modifier .weight(1f) .padding(12.dp) ) { Text(text = "Hello, ") Text( text = name, style = MaterialTheme.typography.headlineMedium.copy( fontWeight = FontWeight.ExtraBold ) ) if (expanded) { Text( text = ("Composem ipsum color sit lazy, " + "padding theme elit, sed do bouncy. ").repeat(4), ) } } IconButton(onClick = { expanded = !expanded }) { Icon( imageVector = if (expanded) Filled.ExpandLess else Filled.ExpandMore, contentDescription = if (expanded) { stringResource(R.string.show_less) } else { stringResource(R.string.show_more) } ) } } } @Preview( showBackground = true, widthDp = 320, uiMode = UI_MODE_NIGHT_YES, name = "GreetingPreviewDark" ) @Preview(showBackground = true, widthDp = 320) @Composable fun GreetingPreview() { BasicsCodelabTheme { Greetings() } } @Preview(showBackground = true, widthDp = 320, heightDp = 320) @Composable fun OnboardingPreview() { BasicsCodelabTheme { OnboardingScreen(onContinueClicked = {}) } } @Preview @Composable fun MyAppPreview() { BasicsCodelabTheme { MyApp(Modifier.fillMaxSize()) } }
浙公网安备 33010602011771号