[BMI 계산기 결과페이지 만들기]
1. File > New > Activity > Empty Views Activity로 새 프로젝트를 만들고 Resultactivity로 이름을 지정한다
2. 빠르고 편하게 하기 위해서 MainActivity의 타이틀 layout을 복사해온다
3. 이후 수치와, 결과, 이모지, 돌아가기 버튼 등을 만들고 상세내용을 조절해준다
a. 이모지는 다운받은 후 복사해서 drawable에 paste 해준다
i. 이때 이모지 파일명이 숫자로만 되어있을 경우 오류가 날 수 있다
b. ImageView에서 기존 이미지를 지우고 src="drawable/원하는이모지명"을 추가해주고 크기를 조정해준다
4. 컴퍼런트들 마다의 고유 ID를 알아보기 쉽게 변경해준다 (MainActivity도 마찬가지로 수정해준다)
5. layout이 아닌 MainActivity.kt로 가서 숫자 입력과 버튼을 눌렀을때 어떻게 될지 코딩해준다
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val heightEditText = findViewById<EditText>(R.id.et_height)
val weightEditText = findViewById<EditText>(R.id.et_weight)
val submitButton = findViewById<Button>(R.id.btn_check)
submitButton.setOnClickListener {
if (heightEditText.text.isEmpty()) {
Toast.makeText(this, "신장을 입력해주세요.", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
if (weightEditText.text.isEmpty()) {
Toast.makeText(this, "체중을 입력해주세요.", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
val height: Int = heightEditText.text.toString().toInt()
val weight: Int = weightEditText.text.toString().toInt()
val intent = Intent(this, Resultactivity::class.java)
intent.putExtra("height", height)
intent.putExtra("weight", weight)
startActivity(intent)
}
}
}
값을 입력하지 않았을때 오류가 나기때문에 예외처리까지 해준 코드다
6. 이제 Resultactivity로 가서 결과 화면에 대한 코드도 입력해준다
package com.example.mybmi_calculator
import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import kotlin.math.pow
import kotlin.math.round
class Resultactivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_resultactivity)
val height = intent.getIntExtra("height", 0)
val weight = intent.getIntExtra("weight", 0)
//BMI 계산
var value = weight / (height/100.0).pow(2.0)
value = round(value*10)/10
var resultText = ""
var resImage = 0
var resColor = 0
if (value <18.5) {
resultText = "저체중"
resImage = R.drawable.img_lv1
resColor = Color.YELLOW
} else if (value >= 18.5 && value < 23.0) {
resultText = "정상 체중"
resImage = R.drawable.img_lv2
resColor = Color.GREEN
} else if (value >= 23.0 && value < 25.0) {
resultText = "과체중"
resImage = R.drawable.img_lv3
resColor = Color.BLACK
} else if (value >= 25.0 && value < 30.0) {
resultText = "경도 비만"
resImage = R.drawable.img_lv4
resColor = Color.CYAN
} else if (value >= 30.0 && value < 35.0) {
resultText = "중경도 비만"
resImage = R.drawable.img_lv5
resColor = Color.MAGENTA
} else {
resultText = "고도 비만"
resImage = R.drawable.img_lv6
resColor = Color.RED
}
val tv_resValue = findViewById<TextView>(R.id.tv_resValue)
val tv_resText = findViewById<TextView>(R.id.tv_resText)
val iv_image = findViewById<ImageView>(R.id.iv_image)
val btn_back = findViewById<Button>(R.id.btn_back)
tv_resValue.text = value.toString()
tv_resText.text = resultText
iv_image.setImageResource(resImage)
tv_resText.setTextColor(resColor)
btn_back.setOnClickListener {
finish()
}
}
}
여러가지 경우의 수를 가정해서 레이아웃을 변경시킬때는 if와 else if를 사용하는것을 볼 수 있다
계산한 숫자의 소수점 첫째자리까지만 보이게 하기 위해서 아래코드가 들어가있다
value = round(value*10)/10