Android/Kotlin
Kotlin BMI(비만도) 계산기 앱 만들기
dalgorithm
2021. 1. 18. 17:51
728x90
✔ 비만도 계산기 기능
- 이름, 몸무게와 키를 입력하는 화면과 비만도 결과를 보여주는 화면으로 액티비티 2개를 구성한다.
- 결과 화면으로 넘어가면 토스트 메세지로 이름과 BMI 수치가 나타난다.
- 인텐트에 데이터를 담아 다른 화면으로 전달한다.
✔ 소스코드
◾ activity_main.xml
- 전체적인 레이아웃을 구성한다.
- ConstraintLayout 기반이다.
- 각 위젯의 아이디를 지정해준다.
<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/heightEditText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:hint="키"
android:inputType="number"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/nameEditText" />
<EditText
android:id="@+id/weightEditText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
android:ems="10"
android:hint="몸무게"
android:inputType="number"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/heightEditText" />
<Button
android:id="@+id/resultButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp"
android:text="결과"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/weightEditText" />
<EditText
android:id="@+id/nameEditText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:hint="이름"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
◾ activity_result.xml
- 결과가 나타나는 화면을 구성한다.
- ConstraintLayout 기반이다.
- 이미지뷰를 넣어 결과에 따라 표정에 변화를 준다.
<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".resultActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="130dp"
android:layout_marginEnd="16dp"
android:text="결과가 표시되는 곳"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/imageView"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginStart="150dp"
android:layout_marginTop="60dp"
android:layout_marginEnd="150dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:srcCompat="@drawable/ic_baseline_sentiment_satisfied_alt_24"
app:tint="@color/teal_700" />
</androidx.constraintlayout.widget.ConstraintLayout>
◾ MainActivity.kt
- xml 코드에 대응하는 변수들을 선언한다.
- 다른 액티비티에 값을 전달해주기 위해 savaData, loadData 함수를 생성한다.
- editText 값을 문자열로 변환하고 int형으로 변환해준다.
package com.example.bmicalculator1
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText
class MainActivity : AppCompatActivity() {
lateinit var resultButton: Button
lateinit var nameEditText: EditText
lateinit var heightEditText: EditText
lateinit var weightEditText: EditText
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
nameEditText=findViewById<EditText>(R.id.nameEditText)
resultButton=findViewById<Button>(R.id.resultButton)
heightEditText=findViewById<EditText>(R.id.heightEditText)
weightEditText=findViewById<EditText>(R.id.weightEditText)
loadData()
resultButton.setOnClickListener {
saveDate(
nameEditText.text.toString(),
heightEditText.text.toString().toInt(), weightEditText.text.toString().toInt())
var intent = Intent(this, resultActivity::class.java)
intent.putExtra("name",nameEditText.text.toString())
intent.putExtra("height",heightEditText.text.toString())
intent.putExtra("weight",weightEditText.text.toString())
startActivity(intent)
}
}
private fun loadData() {
var pref = this.getPreferences(0)
var name =pref.getString("KEY_NAME",null)
var height = pref.getInt("KEY_HEIGHT",0)
var weight = pref.getInt("KEY_WEIGHT",0)
if(height !=0&&weight!=0){
nameEditText.setText(name.toString())
heightEditText.setText(height.toString())
weightEditText.setText(weight.toString())
}
}
private fun saveDate(name: String, height: Int, weight: Int) {
var pref = this.getPreferences(0)
var editor=pref.edit()
editor.putString("KEY_NAME",nameEditText.text.toString()).apply()
editor.putInt("KEY_HEIGHT",heightEditText.text.toString().toInt()).apply()
editor.putInt("KEY_WEIGHT",weightEditText.text.toString().toInt()).apply()
}
}
◾ resultActivity.kt
- 키와 몸무게에 따라 결과를 다르게 출력한다.
package com.example.bmicalculator1
import android.media.Image
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
class resultActivity : AppCompatActivity() {
lateinit var resultTextView: TextView
lateinit var imageView: ImageView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_result)
resultTextView=findViewById<TextView>(R.id.textView)
imageView=findViewById<ImageView>(R.id.imageView)
var name=intent.getStringExtra("name")
var height=intent.getStringExtra("height").toInt()
var weight=intent.getStringExtra("weight").toInt()
//BMI계산
var bmi=weight/Math.pow(height/100.0,2.0)
when{
bmi >=35 -> resultTextView.text="고도 비만"
bmi >=30 -> resultTextView.text="2단계 비만"
bmi >=25 -> resultTextView.text="1단계 비만"
bmi >=23 -> resultTextView.text="과체중"
bmi >=18.5 -> resultTextView.text="정상"
else->resultTextView.text="저체중"
}
when{
bmi >=23 ->
imageView.setImageResource(
R.drawable.ic_baseline_sentiment_very_dissatisfied_24
)
bmi >18.5 ->
imageView.setImageResource(
R.drawable.ic_baseline_sentiment_satisfied_alt_24
)
else ->
imageView.setImageResource(
R.drawable.ic_baseline_mood_bad_24
)
}
Toast.makeText(this,"$name: $bmi", Toast.LENGTH_SHORT).show()
}
}
728x90