본문 바로가기
ⓢⓣⓤⓓⓨ/ⓐⓝⓓⓡⓞⓘⓓⓢⓣⓤⓓⓘⓞ

[Kotlin] BMI 계산기

by heaven00 2021. 8. 30.
728x90

 

 

 

이번 코드를 통해 intent를 확실히 이해할 수 있었다.

 


 

다음과 같이 키와 몸무게를 직접 입력한 후,

comfirm 버튼을 누르면 새로운 창에 bmi를 계산한 값과 type을 알려준다. 

 

출력화면1

 

 

출력화면2

 

 

 

bmi 계산기 만드는 순서

 

(1) 뷰바인딩 적용

  - 저번에 내 포스팅을 참고하면 쉽다!  

  - build.gradle(Module)의 android 밑에 buildFeatures { viewBinding true } 작성 후, sync now

https://heaven0713.tistory.com/43?category=1001160 

 

[Kotlin] 뷰바인딩 (코틀린 시작 전 알아야 할 점)

원래 나는 안드로이드 개발을 자바로만 해왔다 모바일앱프로그램을 자바로 배우기도했고,,, 근데 이제 추세가 코틀린으로 기울고 있는 것 같고 코틀린의 장점을 점점 알게 되어서 공부를 시작

heaven0713.tistory.com

 

 

 

(2) 메인 xml 디자인 (출력화면1)

 - 키와 몸무게를 입력할 수 있고, 버튼을 누를 수 있도록 디자인을 해준다.

 

 

(3) 이동 될 xml 디자인 (출력화면2)

 - 버튼을 눌렀을 때, 화면이 이동될 xml을 디자인 해준다.

 - 이 부분에는 입력받은 키와 몸무게로 bmi를 계산한 값과 type을 보여준다.

 

 

 

(4) MainActivity 코딩

 - 버튼 클릭 이벤트를 넣어주고, 입력 받은 값을 넘겨주는 코드를 작성한다.

 

 

 

(5) ResultActivity 코딩

 - bmi를 계산하고, 계산한 값을 토대로 type을 골라주고 값을 보여주는 코드를 작성한다.

 

 

 

 

코드 작성

 

(2) 메인 xml 디자인 (출력화면1)

 

<?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:orientation="vertical"
    android:padding="16dp"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="height"
        android:textColor="@color/black"
        android:textSize="20dp" />

    <EditText
        android:id="@+id/heightEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:inputType="number" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:text="weight"
        android:textColor="@color/black"
        android:textSize="20dp" />

    <EditText
        android:id="@+id/weightEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:ems="10"
        android:inputType="number" />

    <Button
        android:id="@+id/resultButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:text="confirm" />
</LinearLayout>

 

 

 

 

(3) 이동 될 xml 디자인 (출력화면2)

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal"
        android:padding="10dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="bmi:  "
            android:textColor="@color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/bmiResultTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal"
        android:padding="10dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="type:  "
            android:textColor="@color/black"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/resultTextView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20sp" />

    </LinearLayout>

</LinearLayout>

 

 

 

 

(4) MainActivity 코딩

 

 

package com.example.myapplication

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Toast
import com.example.myapplication.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    //바인딩 객체 선언
    private var mBinding: ActivityMainBinding?= null
    private val binding get() = mBinding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //바인딩 초기화
        mBinding = ActivityMainBinding.inflate(layoutInflater)

        // 생성된 뷰 액티비티에 표시시
        setContentView(binding.root)

        val heightEditText = binding.heightEditText
        val weightEditText = binding.weightEditText
        val resultButton = binding.resultButton

        resultButton.setOnClickListener {
            // 키나 몸무게가 입력되지 않았으면 토스트메시지
            if(heightEditText.text.isEmpty() || weightEditText.text.isEmpty()) {
                Toast.makeText(this, "빈 값이 있습니다", Toast.LENGTH_SHORT).show()
                return@setOnClickListener
            }

            //intent: 여러 화면 간의 이동을 할 수 있도록 해주는 것
            //각각의 edittext에 작성한 값 int로 넘겨주기
            val height: Int = heightEditText.text.toString().toInt()
            val weight: Int = weightEditText.text.toString().toInt()

            val intent = Intent(this, ResultActivity::class.java)

            //다른 액티비티(resultActivity)로 데이터 전달
            intent.putExtra("height", height)
            intent.putExtra("weight", weight)

            //다른 액티비티 시작 -> 액티비티 이동
            startActivity(intent)
        }
    }
}

 

 

 

 

(5) ResultActivity 코딩

 

package com.example.myapplication

import android.app.AppComponentFactory
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.myapplication.databinding.ActivityResultBinding
import kotlin.math.pow

class ResultActivity: AppCompatActivity() {
    //바인딩 객체 선언
    private var mBinding: ActivityResultBinding?= null
    private val binding get() = mBinding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //바인딩 초기화
        mBinding = ActivityResultBinding.inflate(layoutInflater)

        // 생성된 뷰 액티비티에 표시시
        setContentView(binding.root)


        //getIntExtra: 메소드를 이용해서 데이터들을 전송
        val height = intent.getIntExtra("height", 0)
        val weight = intent.getIntExtra("weight", 0)

        //bmi 계산
        val bmi = weight/ (height / 100.0).pow(2.0)

        //각 bmi 값 마다 result 값 범위로 정해주기
        val resultText = when {
            bmi >= 35.0 -> "고도 비만"
            bmi >= 30.0 -> "중정도 비만"
            bmi >= 25.0 -> "경도 비만"
            bmi >= 23.0 -> "과체중"
            bmi >= 18.5 -> "정상체중"
            else -> "저체중"
        }

        //binding으로 각 xml요소들 연결하여 activity에서 사용
        val resultValueTextView = binding.bmiResultTextView
        val resultStringTextView = binding.resultTextView

        //정해진 요소들 text로 각각의 위치에 보여주기
        resultValueTextView.text = bmi.toString()
        resultStringTextView.text = resultText

    }
}

 

 

 

정확한 설명은 코드 주석 참고!

 

 

728x90

댓글