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 ComponentActivity untuk menjalankan aplikasi berbasis Jetpack Compose.
  • setContent digunakan untuk menampilkan MyApp dengan tema BasicsCodelabTheme.

@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) menggunakan rememberSaveable agar 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 mengubah shouldShowOnboarding menjadi false.

@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 LazyColumn untuk 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 Card untuk 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 IconButton dengan 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

Postingan populer dari blog ini

EAS PPB A

Tugas 13 PPB A

Tugas 1 PPB A