Tugas 2 PPB D

 Tugas 2 - PPB

Membuat Aplikasi Hello World Android Studio Jetpack Compose

Ahmad Fauzan Alghifari - 5025211091


Pada pertemuan ke 2 PPB ini, ditugaskan untuk membuat aplikasi sederhana menggunakan android studio jetpack compose. Berikut merupakan dokumentasi kode dari aplikasi yang sudah dibuat


Dokumentasi : 

Fungsi MainActivity

  • Entry point aplikasi yang memanggil MyApp() menggunakan tema Tugas1Theme.

  • Fungsi MyApp()
    • Menentukan apakah pengguna masih berada di layar onboarding atau sudah masuk ke halaman utama greeting.

    • Menggunakan rememberSaveable untuk menyimpan status tampilan.

    OnboardingScreen()
    • Menampilkan teks "Hello World!" serta nama dan NIM pengguna.
    • Terdapat tombol "Continue" untuk melanjutkan ke tampilan berikutnya.
    Greetings()
    • Menampilkan daftar greeting sebanyak 1000 item dengan menggunakan LazyColumn.
    Greeting() dan CardContent()
    • Setiap item greeting dibungkus dalam card
    • Teks hello disertai angka
    • Tombol expand/collapse yang menampilkan deskripsi tambahan dengan animasi

    Kode Sumber : link
    package com.codelab.basics

    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.codelab.basics.ui.theme.Tugas1Theme

    class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
    Tugas1Theme {
    MyApp(modifier = Modifier.fillMaxSize())
    }
    }
    }
    }

    @Composable
    fun MyApp(modifier: Modifier = Modifier) {

    var shouldShowOnboarding by rememberSaveable { mutableStateOf(true) }

    Surface(modifier) {
    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("Hello World!")
    Text("Ahmad Fauzan Alghifari 5025211091")
    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, heightDp = 320)
    @Composable
    fun OnboardingPreview() {
    Tugas1Theme {
    OnboardingScreen(onContinueClicked = {}) // Do nothing on click.
    }
    }

    @Preview(
    showBackground = true,
    widthDp = 320,
    uiMode = UI_MODE_NIGHT_YES,
    name = "GreetingPreviewDark"
    )
    @Preview(showBackground = true, widthDp = 320)
    @Composable
    fun GreetingPreview() {
    Tugas1Theme {
    Greetings()
    }
    }


    @Preview
    @Composable
    fun MyAppPreview() {
    Tugas1Theme {
    MyApp(Modifier.fillMaxSize())
    }
    }


    Dan berikut merupakan hasilnya


    Video Presentasi



    Aplikasi yang dibuat merupakan hasil referensi dari tutorial materi Dasar-Dasar Jetpack Compose. Dimana terdapat dasar dasar jetpack compose android studio seperti animasi, tombol, dan lainnya

    Comments

    Popular posts from this blog

    Tugas Proposal TA