
키워드 : pow, binding, if(예외처리)
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_margin="40dp" //화면의 상하좌우 마진 40dp
android:orientation="vertical" //화면의 구성은 수직
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="신장"
android:textSize="20sp"
android:textStyle="bold"/>
//진하게
<EditText
android:id="@+id/cm" //.kt에서 사용할 ID
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:hint="신장 입력"
android:inputType="number" />
//숫자만 입력가능
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp"
android:layout_marginTop="40dp"
android:layout_marginRight="40dp"
android:text="몸무게"
android:textSize="20sp"
android:textStyle="bold" />
<EditText
android:id="@+id/kg"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:hint="몸무게 입력"
android:inputType="number" />
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="40dp"
android:layout_marginTop="30dp"
android:layout_marginRight="40dp"
android:text="결과 확인" />
//결과 값을 출력해줄 TextView
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<TextView
android:id="@+id/textBMI"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="BMI : " />
//사용자에게 보여지지 않으며 개발자에게만 예시로 보임
<TextView
android:id="@+id/result1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
tools:text="30" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
tools:text="결과 : " />
<TextView
android:id="@+id/result2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
tools:text="정상" />
</LinearLayout>
</LinearLayout>
MainActivity.kt
package com.example.bmi
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.example.bmi.databinding.ActivityMainBinding
import kotlin.math.pow
import kotlin.math.roundToInt
class MainActivity : AppCompatActivity() {
//binding 변수 생성
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//inflate 메소드가 액티비티에서 사용할 바인딩 클래스의 인스턴스 생성
//inflate 메소드 호출 하면 사용할 인스턴스가 생성
binding = ActivityMainBinding.inflate(layoutInflater)
//최상단인 root와 연결하여 출력
setContentView(binding.root)
//ID : btn(버튼)을 클릭 했을 시
binding.btn.setOnClickListener {
//.xml에서 지정한 cm, kg의 값이 입력되지 않았을 시 예외처리
if (binding.cm.text.isEmpty() || binding.kg.text.isEmpty()) {
Toast.makeText(this, "값을 입력", Toast.LENGTH_SHORT).show()
//결과 값들이 사라지며 누르기 전 상태로 돌아감
binding.textBMI.text = ""
binding.result1.text = ""
binding.result2.text = ""
return@setOnClickListener
}
//bmi 연산을 위해 ID cm, kg를 weight, height에 값을 넘겨 줌
val weight: Int = binding.cm.text.toString().toInt()
val height: Int = binding.kg.text.toString().toInt()
//내장함수 제곱근(pow)을 이용한 연산
val bmi = height / (weight / 100.0).pow(2.0)
val resultText = when {
bmi >= 35.0 -> "결과 : 3단계 비만"
bmi >= 30.0 -> "결과 : 2단계 비만"
bmi >= 25.0 -> "결과 : 1단계 비만"
bmi >= 23.0 -> "결과 : 비만 전 단계"
bmi >= 22.9 -> "결과 : 정상체중"
else -> "결과 : 저체중"
}
binding.textBMI.text = "BMI : "
binding.result1.text = bmi.roundToInt().toString() //반올림
binding.result2.text = resultText //when 값 출력
}
}
}
'Android-Kotlin📱' 카테고리의 다른 글
안드로이드 코틀린, 자바 AppCompat (0) | 2022.05.18 |
---|---|
Kotlin 숫자 구별을 위한 확장함수(Extension Function) (0) | 2022.05.17 |
코틀린 뷰바인딩 Kotlin ViewBinding (0) | 2022.05.15 |
Kotlin Retrofit (0) | 2022.05.09 |
Kotlin 갤러리 권한 요청 및 설명 팝업 (0) | 2022.04.25 |