Tugas 2 PPB A
Nama: Meylina Tesa Hapsari
NRP: 5025221149
Kelas: PPB A
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
BasicsCodelabTheme {
MyApp(modifier = Modifier.fillMaxSize())
}
}
}
}Penjelasan:- Menggunakan
ComponentActivityuntuk menjalankan aplikasi berbasis Jetpack Compose. setContentdigunakan untuk menampilkanMyAppdengan temaBasicsCodelabTheme.
@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()
}
}
}
Penjelasan:- Menampilkan layar onboarding (
OnboardingScreen) saat pertama kali dijalankan. - Menyimpan status onboarding (
shouldShowOnboarding) menggunakanrememberSaveableagar tetap tersimpan saat orientasi berubah. - Setelah tombol "Continue" ditekan, tampilan beralih ke daftar greeting (
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")
}
}
}Penjelasan:- Menampilkan teks selamat datang dan tombol "Continue".
- Saat tombol ditekan,
onContinueClicked()dipanggil untuk mengubahshouldShowOnboardingmenjadifalse.
@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)
}
}
}Penjelasan:- Menggunakan
LazyColumnuntuk menampilkan daftar 1000 nama secara efisien. - Setiap item daftar ditampilkan menggunakan
Greeting(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)
}
}Penjelasan:- Menggunakan
Carduntuk membungkus konten dengan warna utama dari tema. - Memanggil
CardContent(name)untuk menampilkan teks dan tombol expand.
@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)
}
)
}
}
}Penjelasan:- Menampilkan teks "Hello, <nama>".
- Teks tambahan muncul jika
expanded == true. - Tombol expand/collapse menggunakan
IconButtondengan ikon ExpandMore atau ExpandLess. - Animasi ekspansi menggunakan
animateContentSize()agar transisi mulus.
@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())
}
}Penjelasan:- Menampilkan preview UI dalam Android Studio tanpa harus menjalankan aplikasi.
- Tersedia preview untuk layar onboarding, greeting, dan MyApp.
- Mode gelap (
uiMode = UI_MODE_NIGHT_YES) digunakan untuk melihat tampilan di mode malam.
Komentar
Posting Komentar