first commit

This commit is contained in:
2026-04-25 17:22:36 +08:00
commit 8c691b0f68
62 changed files with 2290 additions and 0 deletions

View File

@@ -0,0 +1,162 @@
package com.example.defenseapplication.login
import android.content.Intent
import com.example.defenseapplication.R
import android.os.Bundle
import android.os.CountDownTimer
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import com.example.defenseapplication.databinding.ActivityLoginBinding
class LoginActivity : AppCompatActivity() {
private lateinit var binding: ActivityLoginBinding
private var currentLoginMode = LoginMode.SMS
enum class LoginMode { SMS, PASSWORD }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(binding.root)
setupTabListeners()
setupClickListeners()
switchToSmsMode()
}
private fun setupTabListeners() {
binding.tvSmsLogin.setOnClickListener {
if (currentLoginMode != LoginMode.SMS) {
currentLoginMode = LoginMode.SMS
switchToSmsMode()
}
}
binding.tvPwdLogin.setOnClickListener {
if (currentLoginMode != LoginMode.PASSWORD) {
currentLoginMode = LoginMode.PASSWORD
switchToPasswordMode()
}
}
}
private fun switchToSmsMode() {
binding.tvSmsLogin.setTextColor(getColor(R.color.black))
binding.tvPwdLogin.setTextColor(getColor(R.color.gray))
binding.smsRowLayout.visibility = View.VISIBLE
binding.passwordRowLayout.visibility = View.GONE // 隐藏密码行容器
binding.registerText.visibility = View.VISIBLE
binding.forgetText.visibility = View.GONE
updateRegisterTextConstraints(center = true)
//需要正确的方法名和参数
updateLoginButtonTopConstraint(R.id.smsRowLayout)
}
private fun switchToPasswordMode() {
binding.tvPwdLogin.setTextColor(getColor(R.color.black))
binding.tvSmsLogin.setTextColor(getColor(R.color.gray))
binding.smsRowLayout.visibility = View.GONE
//正确的属性访问
binding.passwordRowLayout.visibility = View.VISIBLE // 显示密码行容器
binding.registerText.visibility = View.VISIBLE
binding.forgetText.visibility = View.VISIBLE
updateRegisterTextConstraints(center = false)
updateLoginButtonTopConstraint(R.id.passwordRowLayout)
}
// 动态修改登录按钮的顶部约束
private fun updateLoginButtonTopConstraint(topTargetId: Int) {
val params = binding.loginBtn.layoutParams as ConstraintLayout.LayoutParams
params.topToBottom = topTargetId
params.topMargin = 32
binding.loginBtn.layoutParams = params
}
// 动态修改立即注册的约束(居中/左对齐)
private fun updateRegisterTextConstraints(center: Boolean) {
val params = binding.registerText.layoutParams as ConstraintLayout.LayoutParams
if (center) {
// 短信模式:居中显示
params.startToStart = ConstraintSet.PARENT_ID
params.endToEnd = ConstraintSet.PARENT_ID
} else {
// 密码模式:左对齐登录按钮
params.startToStart = binding.loginBtn.id
params.endToEnd = ConstraintSet.UNSET
}
params.topToBottom = binding.loginBtn.id
params.topMargin = 20
binding.registerText.layoutParams = params
}
private fun setupClickListeners() {
binding.loginBtn.setOnClickListener {
val phone = binding.etPhone.text.toString()
if (phone.isEmpty()) {
Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
when (currentLoginMode) {
LoginMode.SMS -> {
val code = binding.etSmsCode.text.toString()
if (code.isEmpty()) {
Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "验证码登录成功\n手机号:$phone\n验证码:$code", Toast.LENGTH_SHORT).show()
}
}
LoginMode.PASSWORD -> {
val pwd = binding.etPassword.text.toString()
if (pwd.isEmpty()) {
Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show()
} else {
Toast.makeText(this, "密码登录成功\n手机号:$phone\n密码:$pwd", Toast.LENGTH_SHORT).show()
}
}
}
}
binding.sendCodeBtn.setOnClickListener {
val phone = binding.etPhone.text.toString()
if (phone.isEmpty()) {
Toast.makeText(this, "请先输入手机号", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
Toast.makeText(this, "验证码已发送至 $phone", Toast.LENGTH_SHORT).show()
startCountDown()
}
binding.registerText.setOnClickListener {
val intent= Intent(this, RegisterActivity::class.java)
startActivity(intent)
Toast.makeText(this, "跳转到注册页面", Toast.LENGTH_SHORT).show()
}
binding.forgetText.setOnClickListener {
val intent= Intent(this, ForgetPasswordActivity::class.java)
startActivity(intent)
Toast.makeText(this, "找回密码", Toast.LENGTH_SHORT).show()
}
}
private fun startCountDown() {
binding.sendCodeBtn.isEnabled = false
object : CountDownTimer(60000, 1000) {
override fun onTick(millisUntilFinished: Long) {
binding.sendCodeBtn.text = "${millisUntilFinished / 1000}秒后重试"
}
override fun onFinish() {
binding.sendCodeBtn.text = "发送验证码"
binding.sendCodeBtn.isEnabled = true
}
}.start()
}
}