Skip to content

Commit

Permalink
Merge pull request #3 from NOW-SOPT-ANDROID/feat/week_xml1
Browse files Browse the repository at this point in the history
[1주차/필수/XML] Android UI 구현 기초 : 회원가입 및 로그인
  • Loading branch information
SYAAINN authored Apr 15, 2024
2 parents 3fabe3c + 70139b8 commit 74faef8
Show file tree
Hide file tree
Showing 8 changed files with 429 additions and 6 deletions.
4 changes: 4 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ android {
kotlinOptions {
jvmTarget = '17'
}

buildFeatures {
viewBinding true
}
}

dependencies {
Expand Down
9 changes: 7 additions & 2 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,19 @@
android:theme="@style/Theme.NOWSOPTAndroid"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:name=".LoginActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SignUpActivity"
android:exported="false"/>
<activity
android:name=".MainActivity"
android:exported="false"/>
</application>

</manifest>
48 changes: 48 additions & 0 deletions app/src/main/java/com/sopt/now/LoginActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.sopt.now

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.sopt.now.databinding.ActivityLoginBinding
import com.sopt.now.databinding.ActivityMainBinding

class LoginActivity: AppCompatActivity() {
private lateinit var binding: ActivityLoginBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(binding.root)

val userId = intent.getStringExtra("ID")
val userPw = intent.getStringExtra("PW")
val userName = intent.getStringExtra("Name")
val userPlace = intent.getStringExtra("Place")

binding.btnSignIn.setOnClickListener {
if (binding.etSignInId.text.toString()== userId) {
if (binding.etSignInPw.text.toString() == userPw) {
Toast.makeText(this, "로그인 되었습니다!", Toast.LENGTH_SHORT).show()

val intent = Intent(this,MainActivity::class.java) // 메인 페이지로 이동
intent.putExtra("ID",userId)
intent.putExtra("PW",userPw)
intent.putExtra("Name",userName)
intent.putExtra("Place",userPlace)
startActivity(intent)
}
else
Toast.makeText(this, "비밀번호가 잘못되었습니다", Toast.LENGTH_SHORT).show()
}
else {
Toast.makeText(this, "아이디가 잘못되었습니다!", Toast.LENGTH_SHORT).show()
}
}

binding.btnJoin.setOnClickListener {
val intent = Intent(this,SignUpActivity::class.java) // 회원가입 페이지로 이동
startActivity(intent)
}
}
}
15 changes: 14 additions & 1 deletion app/src/main/java/com/sopt/now/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,24 @@ import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.sopt.now.databinding.ActivityLoginBinding
import com.sopt.now.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)

val userId = intent.getStringExtra("ID")
val userPw = intent.getStringExtra("PW")
val userName = intent.getStringExtra("Name")
val userPlace = intent.getStringExtra("Place")

binding.tvMainName.text = userName
binding.tvMainShowId.text = userId
binding.tvMainShowPw.text = userPw
binding.tvMainShowPlace.text = userPlace
}
}
49 changes: 49 additions & 0 deletions app/src/main/java/com/sopt/now/SignUpActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package com.sopt.now

import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.google.android.material.snackbar.Snackbar
import com.sopt.now.databinding.ActivitySignupBinding
class SignUpActivity : AppCompatActivity() {
private lateinit var binding: ActivitySignupBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySignupBinding.inflate(layoutInflater)
setContentView(binding.root)

binding.btnSignUp.setOnClickListener {
// 1. 모든 정보 입력되지 않았을 시, 회원 가입 불가 (snackbar , toast 등으로 메세지 표시)
// 2. 성공 시 LoginActivity로 화면 전환, 정보도 함께 전달, 회원가입 성공 메세지 표시
// <회원가입 성공조건>
// - ID : 6~10 글자
// - Password : 8~12 글자
// - 닉네임 : 한 글자 이상, 공백으로만 이루어진 닉네임은 불가
// - 나머지 조건 : 자유
if (binding.etSignUpId.text.length in 6..10 &&
binding.etSignUpPw.text.length in 8..12 &&
binding.etSignUpName.text.isNotEmpty() &&
binding.etSignUpPlace.text.isNotEmpty()) {

Toast.makeText(this,"회원가입 성공", Toast.LENGTH_SHORT).show()

val intent = Intent(this,LoginActivity::class.java) // 회원가입 성공 시, 로그인 화면으로 이동
// 회원가입 정보 넘기기
intent.putExtra("ID",binding.etSignUpId.text.toString())
intent.putExtra("PW",binding.etSignUpPw.text.toString())
intent.putExtra("Name",binding.etSignUpName.text.toString())
intent.putExtra("Place",binding.etSignUpPlace.text.toString())
startActivity(intent)
}
else if (binding.etSignUpId.text.isEmpty() || binding.etSignUpPw.text.isEmpty() ||
binding.etSignUpName.text.isEmpty() || binding.etSignUpPlace.text.isEmpty() ) {
Toast.makeText(this, "입력하지 않은 정보가 있습니다.", Toast.LENGTH_SHORT).show()
}

else
Toast.makeText(this,"회원가입 실패",Toast.LENGTH_SHORT).show()
}
}
}
93 changes: 93 additions & 0 deletions app/src/main/res/layout/activity_login.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/tvSignInTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:gravity="center"
android:text="Welcome to SOPT"
android:textSize="30sp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
/>

<TextView
android:id="@+id/tvSignInId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
android:layout_marginStart="30dp"
android:gravity="center"
android:text="아이디"
android:textSize="25sp"
app:layout_constraintTop_toBottomOf="@id/tvSignInTitle"
app:layout_constraintStart_toStartOf="parent"
/>

<EditText
android:id="@+id/etSignInId"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:hint="아이디를 입력해주세요"
app:layout_constraintTop_toBottomOf="@id/tvSignInId"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
/>

<TextView
android:id="@+id/tvSignInPw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginStart="30dp"
android:gravity="center"
android:text="비밀번호"
android:textSize="25sp"
app:layout_constraintTop_toBottomOf="@id/etSignInId"
app:layout_constraintStart_toStartOf="parent"
/>

<EditText
android:id="@+id/etSignInPw"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:hint="비밀번호를 입력해주세요"
android:inputType="textPassword"
app:layout_constraintTop_toBottomOf="@id/tvSignInPw"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
/>

<Button
android:id="@+id/btnSignIn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:text="로그인 하기"
android:layout_marginBottom="80dp"
app:layout_constraintBottom_toBottomOf="parent"
/>

<Button
android:id="@+id/btnJoin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:layout_marginBottom="30dp"
android:text="회원가입"
app:layout_constraintTop_toBottomOf="@id/btnSignIn"
app:layout_constraintBottom_toBottomOf="parent"
/>


</androidx.constraintlayout.widget.ConstraintLayout>
97 changes: 94 additions & 3 deletions app/src/main/res/layout/activity_main.xml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,103 @@
tools:context=".MainActivity">

<TextView
android:id="@+id/tvMainSopt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
android:text="SOPT에 온 걸 환영해!"
android:textSize="30dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="40dp"/>

<ImageView
android:id="@+id/imgMainProfile"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_marginTop="110dp"
android:layout_marginStart="20dp"
app:layout_constraintTop_toTopOf="@+id/tvMainSopt"
app:layout_constraintStart_toStartOf="parent"
app:srcCompat="@drawable/ic_launcher_background"
app:layout_constraintDimensionRatio="2:1"
/>

<TextView
android:id="@+id/tvMainName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
app:layout_constraintTop_toTopOf="@+id/tvMainSopt"
app:layout_constraintStart_toEndOf="@+id/imgMainProfile"
android:layout_marginTop="125dp"
android:layout_marginStart="20dp"
/>

<TextView
android:id="@+id/tvMainId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:layout_marginStart="50dp"
android:text="아이디"
android:textSize="20sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toBottomOf="@+id/imgMainProfile" />

<TextView
android:id="@+id/tvMainShowId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginTop="10dp"
android:textSize="15dp"
app:layout_constraintTop_toBottomOf="@+id/tvMainId"
app:layout_constraintStart_toStartOf="parent"/>

<TextView
android:id="@+id/tvMainPw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="50dp"
android:layout_marginTop="30dp"
android:text="비밀번호"
android:textSize="20sp"
app:layout_constraintTop_toBottomOf="@+id/tvMainShowId"
app:layout_constraintStart_toStartOf="parent"/>

<TextView
android:id="@+id/tvMainShowPw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginStart="50dp"
android:textSize="15dp"
app:layout_constraintTop_toBottomOf="@+id/tvMainPw"
app:layout_constraintStart_toStartOf="parent"/>

<TextView
android:id="@+id/tvMainPlace"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/tvMainShowPw"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="30dp"
android:layout_marginStart="50dp"
android:text="거주지"
android:textSize="20sp"
tools:layout_editor_absoluteX="42dp"
tools:layout_editor_absoluteY="433dp" />

<TextView
android:id="@+id/tvMainShowPlace"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/tvMainPlace"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="10dp"
android:layout_marginStart="50dp"
android:textSize="15sp" />


</androidx.constraintlayout.widget.ConstraintLayout>
Loading

0 comments on commit 74faef8

Please sign in to comment.