코틀린(Kotlin)/해보기

[코틀린(Kotlin)] BMI 계산기

초보왕보초 2023. 11. 6. 17:12
728x90

제 지식이 아닌, 잘 모르는 상태에서 따라 만드는 과정입니다

 


 

메인화면 레이아웃

XML파일에서 디자인 탭을 눌러 폼을 이용하여 BMI 계산기의 포맷을 만들어준다

TextView와 editText, Button을 각각 상하 좌우 정렬을 해준다

각 뷰를 클릭해서 상하, 좌우 정렬 및 텍스트 사이즈, 스타일을 조정해 준다

 

 

가로로 정렬시킬 TextView들은 한 번에 묶기 위해 Chains →  Create Horizontal Chain을 해준다.

그 후 Chain  → Chain Horizontal Chain Style  → packed으로 설정해 준다

 

 

실행 결과

아직 코드가 없기 때문에 숫자만 입력할 수 있다

그리고 숫자가 왼쪽정렬되어 있기 때문에 다소 불편하다

 

 

android:gravity="center"를 이용해서 텍스트 가운데 정렬하기

 

 

결과화면 레이아웃 생성

MainActivity 우클릭 후 New → Activity → Empty Views Activity를 생성해 준다

 

 

결과화면 레이아웃 만들기

메인화면 레이아웃처럼 상하, 좌우 정렬을 해준다

+) ImageView를 생성해 준다

 

drawable 폴더에 이미지 소스들을 넣어준다

(결괏값에 따라서 다른 이미지들을 반환시킬 것이다 )

 

 

 


 

 

 

이제 XML작업은 끝났다

코드 작성을 통해서 키와 몸무게 값을 입력받아 결과 화면으로 넘어가는 기능을 만들도록 한다

 

메인화면 코드는 생각보다 짧았다

대신 Intent를 이용해서 Activity 화면 전환을 한다는 것을 알게 되었다

 

 

MainActivity 코드

 

Activity : 애플리케이션의 단일 화면

Intent : 안드로이드 기본 구성 요소(컴포넌트) 간의 통신을 위해 사용되는 메시지 객체

            ex) 액티비티 시작, 서비스 시작, 브로드캐스트 전달

 

안드로이드의 4대 구성 요소

  • Activity : 화면에 표시되어 사용자와 상호 작용을 하는 컴포넌트
  • Service : 백그라운드에서 실행되는 컴포넌트(화면이 없는 Activity). 
  • Broadcast Receiver : 시스템에서 보내는 메시지를 수신을 하기 위한 컴포넌트
  • Content Provider : 앱 간의 데이터 공유를 위한 컴포넌트

(Intent에 대해서 검색하다가 다른 분의 글을 보고 알았다)

 

 

 

(코드 해석해 보기)

선언부

xml에서 만들었던 컴포넌트들을 사용하기 위해서 findViewById를 이용해 선언한다

 

 

setOnClickListener를 이용해서 버튼을 클릭했을 때

신장과 체중의 입력을 하지 않고 ResultActivity로 넘어가려고 하면 Toast를 이용해서 짧은 메시지를 띄운다

(MainActivity 코드의 결과 하단을 보면 "신장을 입력해주세요"를 볼 수 있다)

 

height와 weight의 입력값을 받는다

 

ResultActivity로 화면전환 시켜주는 Intent 사용

입력값을 넘겨주기 위해서 putExtra를 사용한다고 한다

startActivity() 함수에 생성된 intent 인스턴스를 인자로 포함하여 안드로이드에 호출한다

 

 

 

ResultActivity 코드

MainActivity에서 입력된 Intent 사용 get

getIntExtra를 사용해서 MainActivity에서 입력받은 Intent를 사용할 수 있다고 한다

(name에는 앞에서 썼던 intent의 키 값을 써준다)

 

BMI계산

BMI의 계산식은 체중을 신장의 제곱으로 나누는 것이다 

(MainActivity에서 신장을 cm으로 입력받았는데, m으로 계산하기 위해서 height/100.0)

(프로그래머스 문제 풀 때 배웠던 pow())

BMI 계산 후에 소수 점 한자리만 리턴하기 위해서 round를 사용한다

 

round : 반올림

(pow 배울 때 같이 배웠다)

소수점 아래 n번 째 자리에서 반올림을 할 때 사용한다

추가적인 연산이 필요하다

아래작업을 통해서 n번 째 자리에서 반올림 한 수를 구할 수 있다

  1. 반올림하고자 하는 수에 10^(n-1)을 곱한다
  2. round 함수를 사용해 반올림한다
  3. 다시 10^(n-1)로 나눈다

각 조건에 따라서 비만정도를 나눠준다

조건에 따라 resultText, resImage, resColor에 다른 값을 주어, 결과 레이아웃의 BMI 값, 비만정도, 표정이미지를 바꿔준다

 

Id를 입력받아 연결해 주고, 값을 넣어주기

MainActivity에서 findViewById를 사용해서 연결해 준 것처럼 각 컴포넌트를 연결해 준다

연결해 준 컴포넌트들에 값을 넣어준다

 

돌아가기 버튼

setOnClickListener를 사용해서 클릭했을 때 finish() 되도록 한다

728x90