Tugas 7 - Halaman Login
Halaman Simple Login
Langkah 1: Membuat Proyek Baru di Android Studio
- Buka Android Studio setelah instalasi selesai.
- Klik "Start a new Android Studio project".
- Pada layar pemilihan template, pilih "Empty Compose Activity" lalu klik Next.
- Masukkan nama aplikasi (misalnya, "My Login").
- Tentukan lokasi penyimpanan proyek di sistem Anda.
- Pilih Language sebagai Kotlin.
- Pastikan Use AndroidX artifacts dicentang.
- Klik Finish.
- Pada halaman "Select a minimum SDK", pilih API Level 24: Android 7.0 (Nougat) sebagai Minimum SDK.
- Android Studio akan mulai membangun proyek Anda. Tunggu hingga proses ini selesai.
Langkah 2: Mengedit File MainActivity.kt
- Setelah proyek selesai dibangun, buka file MainActivity.kt.
- Sesuaikan kode seperti berikut:
package com.example.mylogin
import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.PasswordVisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.example.mylogin.ui.theme.MyLoginTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MyLoginTheme { LoginScreen() } } } } @OptIn(ExperimentalComposeUiApi::class) @Composable fun LoginScreen() { var email by remember { mutableStateOf("") } var password by remember { mutableStateOf("") } val keyboardController = LocalSoftwareKeyboardController.current val focusManager = LocalFocusManager.current val passwordFocusRequester = remember { FocusRequester() } val interactionSource = remember { MutableInteractionSource() } Column( modifier = Modifier .fillMaxSize() .padding(horizontal = 24.dp) .clickable( interactionSource = interactionSource, indication = null ) { keyboardController?.hide() focusManager.clearFocus() }, verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Image( painter = painterResource(id = R.drawable.a), contentDescription = "Login image", modifier = Modifier.size(200.dp) ) Text( text = "Welcome Back", fontSize = 28.sp, fontWeight = FontWeight.Bold, color = Color(0xFF673AB7), textAlign = TextAlign.Center ) Spacer(modifier = Modifier.height(4.dp)) Text( text = "Login to your account", fontSize = 16.sp, color = Color(0xFF9575CD) ) Spacer(modifier = Modifier.height(24.dp)) // Email field dengan peningkatan keyboard control OutlinedTextField( value = email, onValueChange = { email = it }, label = { Text("Email address") }, modifier = Modifier .fillMaxWidth(), shape = RoundedCornerShape(8.dp), keyboardOptions = KeyboardOptions( keyboardType = KeyboardType.Email, imeAction = ImeAction.Next ), keyboardActions = KeyboardActions( onNext = { passwordFocusRequester.requestFocus() } ), singleLine = true ) Spacer(modifier = Modifier.height(16.dp)) OutlinedTextField( value = password, onValueChange = { password = it }, label = { Text("Password") }, modifier = Modifier .fillMaxWidth() .focusRequester(passwordFocusRequester), shape = RoundedCornerShape(8.dp), visualTransformation = PasswordVisualTransformation(), keyboardOptions = KeyboardOptions( keyboardType = KeyboardType.Password, imeAction = ImeAction.Done ), keyboardActions = KeyboardActions( onDone = { keyboardController?.hide() focusManager.clearFocus() } ), singleLine = true ) Spacer(modifier = Modifier.height(24.dp)) Button( onClick = { keyboardController?.hide() focusManager.clearFocus() }, modifier = Modifier.fillMaxWidth(0.7f), shape = RoundedCornerShape(12.dp), colors = ButtonDefaults.buttonColors( containerColor = Color(0xFF673AB7) ) ) { Text( text = "Login", fontSize = 16.sp, fontWeight = FontWeight.Medium, modifier = Modifier.padding(vertical = 8.dp) ) } Spacer(modifier = Modifier.height(16.dp)) Text( text = "Forgot Password?", color = Color(0xFF673AB7), fontWeight = FontWeight.Medium, modifier = Modifier.clickable { // Handle forgot password } ) Spacer(modifier = Modifier.height(32.dp)) Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically ) { Spacer( modifier = Modifier .weight(1f) .height(1.dp) .padding(end = 8.dp) .background(Color.LightGray) ) Text( text = "Or sign in with", color = Color.Gray ) Spacer( modifier = Modifier .weight(1f) .height(1.dp) .padding(start = 8.dp) .background(Color.LightGray) ) } Spacer(modifier = Modifier.height(24.dp)) // Social media icons Row( modifier = Modifier .fillMaxWidth() .padding(horizontal = 40.dp), horizontalArrangement = Arrangement.SpaceEvenly ) { Image( painter = painterResource(id = R.drawable.fb), contentDescription = "Facebook", modifier = Modifier .size(60.dp) .clickable { //Facebook clicked } ) Image( painter = painterResource(id = R.drawable.google), contentDescription = "Google", modifier = Modifier .size(60.dp) .clickable { //Google clicked } ) Image( painter = painterResource(id = R.drawable.twitter), contentDescription = "Twitter", modifier = Modifier .size(60.dp) .clickable { //Twitter clicked } ) } } }
Langkah 3: Menjalankan Aplikasi
- Klik "Run" (ikon hijau di toolbar) untuk menjalankan aplikasi.
- Pilih Emulator yang sudah Anda siapkan atau sambungkan perangkat fisik Android Anda.
- Android Studio akan membangun dan menjalankan aplikasi.
- Isi kolom email dan password, lalu klik Login.



Comments
Post a Comment