Membuat Aplikasi Login Page Sederhana
Faiz haq noviandra ciptadi putra
5025211132
Tugas 7
Membuat Halaman Login
package com.example.mylogin
import android.os.Bundle
import androidx.compose.runtime.remember
import androidx.compose.runtime.mutableStateOf
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.foundation.shape.RoundedCornerShape
import com.example.mylogin.ui.theme.MyloginTheme
import androidx.compose.foundation.background
import androidx.compose.ui.graphics.Brush
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
MyloginTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
LoginScreen(modifier = Modifier.padding(innerPadding))
}
}
}
}
}
@Composable
fun LoginScreen(modifier: Modifier = Modifier) {
val email = remember { mutableStateOf("") }
val password = remember { mutableStateOf("") }
Box(
modifier = modifier
.fillMaxSize()
.background(
brush = Brush.verticalGradient(
colors = listOf(Color(0xFFE0C3FC), Color(0xFF8EC5FC))
)
),
contentAlignment = Alignment.Center
) {
Card(
elevation = CardDefaults.cardElevation(defaultElevation = 8.dp),
shape = RoundedCornerShape(16.dp),
modifier = Modifier
.padding(24.dp)
.fillMaxWidth()
.wrapContentHeight()
) {
Column(
modifier = Modifier
.padding(24.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Image(
painter = painterResource(id = R.drawable.enter),
contentDescription = "Login Image",
modifier = Modifier
.height(120.dp)
.padding(bottom = 16.dp)
)
Text("Welcome Back!", style = MaterialTheme.typography.headlineMedium)
Text("Please login to continue", style = MaterialTheme.typography.bodyMedium)
Spacer(modifier = Modifier.height(24.dp))
OutlinedTextField(
value = email.value,
onValueChange = { email.value = it },
label = { Text("Email Address") },
singleLine = true,
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(12.dp))
OutlinedTextField(
value = password.value,
onValueChange = { password.value = it },
label = { Text("Password") },
singleLine = true,
visualTransformation = PasswordVisualTransformation(),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(20.dp))
Button(
onClick = { /* Handle Login */ },
modifier = Modifier
.fillMaxWidth()
.height(50.dp),
shape = RoundedCornerShape(12.dp),
colors = ButtonDefaults.buttonColors(
containerColor = Color(0xFF6A1B9A)
)
) {
Text("Login", color = Color.White)
}
Spacer(modifier = Modifier.height(12.dp))
TextButton(onClick = { /* Forgot Password */ }) {
Text("Forgot Password?", style = MaterialTheme.typography.bodySmall)
}
Spacer(modifier = Modifier.height(16.dp))
Text("Or sign in with", fontSize = 14.sp, color = Color.Gray)
Spacer(modifier = Modifier.height(8.dp))
Row(
horizontalArrangement = Arrangement.Center,
modifier = Modifier.fillMaxWidth()
) {
listOf(R.drawable.facebook, R.drawable.google, R.drawable.github).forEach { iconId ->
IconButton(onClick = { }) {
Image(
painter = painterResource(id = iconId),
contentDescription = null,
modifier = Modifier.size(36.dp)
)
}
}
}
}
}
}
}
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
MyloginTheme {
LoginScreen()
}
}
Struktur Umum
Komponen utama:
LoginScreen
ditampilkan di dalamBox
.Box
: digunakan agar bisa menempatkanCard
(form login) di tengah layar dengan latar gradient.Card
: digunakan untuk memberi efek melayang (elevation) pada form agar terlihat bersih dan rapi.UI sudah responsif dan modern dengan
Jetpack Compose
.
Background Gradient
Mengatur latar belakang layar dengan warna gradient vertikal ungu ke biru muda.
Menambah nuansa elegan dan modern.
Form Login dalam Card
Card
membungkus form login agar terlihat seperti kartu melayang, terpisah dari latar belakang.RoundedCornerShape
memperhalus sudutnya.
Gambar Ikon Login
Menampilkan ikon masuk (login) di atas form.
File gambar
enter.png
harus ada dires/drawable
.
Email dan Password
Input email dan password dengan desain border outline.
Password disembunyikan dengan
PasswordVisualTransformation()
.
Tombol Login
Tombol utama berwarna ungu tua.
Tinggi 50dp agar terasa tombol besar & tegas.
"Forgot Password?"
Teks tombol yang ringan, bisa diarahkan ke halaman lupa password nanti.
Login via Sosial Media
Tiga ikon media sosial ditampilkan sebagai tombol.
Jika ingin berfungsi, kamu bisa tambahkan
onClick = { handleFacebookLogin() }
dan seterusnya.
Catatan Tambahan
Semua file gambar (
enter.png
,facebook.png
,google.png
,github.png
) harus ada di folderres/drawable
.Jika tidak ada, akan muncul error
Unresolved reference: facebook
, dll.Gunakan format
.png
dan nama file huruf kecil tanpa spasi.
Preview
Untuk menampilkan preview di Android Studio tanpa menjalankan emulator.
Komentar
Posting Komentar