Membuat Halaman Login
Membuat Projek Baru
Klik New Project lalu pilih Empty Activities. Ubah nama projek sesuai keinginan Anda, saya memilih nama MyLogin. Pilih minimum SDK menjadi API 26 ("Oreo"; Android 8.0). Klik Finish.
Mengedit File MainActitivty.kt
- Menghapus fungsi Greeting dan GreetingPreview serta menghapus MyLoginTheme. Sehingga sumber kode menjadi seperti ini
- Kita ingin membuat fungsi baru, tetapi menaruhnya pada file yang berbeda. Hal ini dapat dilakukan dengan cara klik kanan pada folder package, lalu new, lalu Kotlin Class/File
- Pilih tipe file dan beri nama LoginScreen, di sini kita akan mencoba terlebih dahulu memberikan tulisan sembarang. Ubah LoginScreen.kt dengan menambahkan elemen text dan panggil fungsi LoginScreen pada MainActivity.kt. Didapatkan hasil sesuai gambar di bawah ini:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
package com.example.mylogin import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import com.example.mylogin.ui.theme.MyLoginTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { LoginScreen() } } } - Membuat tampilan yang menarik dengan menata setiap elemen. Ubahlah kode LoginScreen.kt menjadi seperti berikut:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
package com.example.mylogin import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer 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.material3.Button import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.TextButton import androidx.compose.ui.Alignment import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @Composable fun LoginScreen(){ Column ( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Image(painter = painterResource(id = R.drawable.bglogin), contentDescription = "login image", modifier = Modifier.size(200.dp)) Text(text = "Welcome Back", fontSize = 28.sp, fontWeight = FontWeight.Bold) Spacer(modifier = Modifier.height(16.dp)) OutlinedTextField(value = "", onValueChange = {}, label = { Text(text = "Email Address") }) Spacer(modifier = Modifier.height(16.dp)) OutlinedTextField(value = "", onValueChange = {}, label = { Text(text = "Password") }) Spacer(modifier = Modifier.height(16.dp)) Button(onClick = {}) { Text(text = "Login") } Spacer(modifier = Modifier.height(32.dp)) Text(text = "Forgot Password?", modifier = Modifier.clickable { }) Spacer(modifier = Modifier.height(32.dp)) Text(text = "Or Sign in with") Row ( modifier = Modifier .fillMaxWidth() .padding(40.dp), horizontalArrangement = Arrangement.SpaceEvenly ) { Image(painter = painterResource(id = R.drawable.facebook), contentDescription = "facebook", modifier = Modifier .size(45.dp) .clickable { } ) Image(painter = painterResource(id = R.drawable.instagram), contentDescription = "instagram", modifier = Modifier .size(45.dp) .clickable { } ) Image(painter = painterResource(id = R.drawable.google), contentDescription = "google", modifier = Modifier .size(45.dp) .clickable { } ) } } } - Hasil langkah 4 masih belum dapat menerima input dari user, maka pada langkah ini kita akan menambahkannya. Hal ini dapat dilakukan dengan menambahkan variable email dan password dan merubah nilai parameter pada text field yang telah kita buat. Sumber kode LoginScreen.kt menjadi seperti berikut:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
package com.example.mylogin import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.foundation.Image import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer 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.material3.Button import androidx.compose.material3.OutlinedTextField import androidx.compose.ui.Alignment import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.runtime.* import androidx.compose.ui.text.input.PasswordVisualTransformation @Composable fun LoginScreen(){ var email by remember { mutableStateOf(value = "") } var password by remember { mutableStateOf(value = "") } Column ( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Image(painter = painterResource(id = R.drawable.bglogin), contentDescription = "login image", modifier = Modifier.size(200.dp)) Text(text = "Welcome Back", fontSize = 28.sp, fontWeight = FontWeight.Bold) Spacer(modifier = Modifier.height(16.dp)) OutlinedTextField(value = email, onValueChange = { email = it }, label = { Text(text = "Email Address") }) Spacer(modifier = Modifier.height(16.dp)) OutlinedTextField(value = password, onValueChange = { password = it }, label = { Text(text = "Password") }, visualTransformation = PasswordVisualTransformation()) Spacer(modifier = Modifier.height(16.dp)) Button(onClick = {}) { Text(text = "Login") } Spacer(modifier = Modifier.height(32.dp)) Text(text = "Forgot Password?", modifier = Modifier.clickable { }) Spacer(modifier = Modifier.height(32.dp)) Text(text = "Or Sign in with") Row ( modifier = Modifier .fillMaxWidth() .padding(40.dp), horizontalArrangement = Arrangement.SpaceEvenly ) { Image(painter = painterResource(id = R.drawable.facebook), contentDescription = "facebook", modifier = Modifier .size(45.dp) .clickable { } ) Image(painter = painterResource(id = R.drawable.instagram), contentDescription = "instagram", modifier = Modifier .size(45.dp) .clickable { } ) Image(painter = painterResource(id = R.drawable.google), contentDescription = "google", modifier = Modifier .size(45.dp) .clickable { } ) } } } Keterangan
- mutableStateOf memungkinkan nilai variable untuk berubah
- pengaturan posisi dapat dilakukan berdasarkan horizontal atau vertikal sesuai pada baris kode 39 dan 40
- Spacer dapat digunakan untuk memberikan jarak antar elemen secara horizontal maupun vertikal
- OutlinedTextField dapat digunakan sebagai input dengan model yang cukup menarik
- visualTransformation = PasswordVisualTransformation() dapat digunakan untuk elemen password sehingga apa yang diketik akan disamarkan menjadi tanda bintang
Referensi: https://www.youtube.com/watch?v=-Kj9T1sa6zk
Komentar
Posting Komentar