dalgorithm
달공의 개발기
dalgorithm
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • Back-end (0)
    • Java (11)
    • 자료구조 (7)
    • Network (31)
    • Database (9)
    • Baekjoon Online (24)
    • 클라우드 (6)
    • Android (15)
      • Kotlin (14)
    • AI (27)
      • Machine Learning&Deep Learn.. (27)
    • Web (23)
      • Webhacking (17)
      • WebProgramming (6)
    • 기술면접 (1)
      • JAVA&자료구조 (0)
      • Spring (0)
      • 컴퓨터구조&운영체제 (0)
      • 네트워크 (0)
      • 데이터베이스 (0)
    • CTF 스터디 (15)
    • 대외활동 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 네트워크
  • 자바
  • 인공지능
  • java
  • 포너블
  • Guacamole
  • gcp
  • 웹해킹
  • 자료구조
  • db
  • 코드리뷰
  • python #백준
  • cs
  • 딥러닝
  • CTF
  • 침입탐지
  • 머신러닝
  • 클라우드
  • 데이터베이스
  • kotlin

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dalgorithm

달공의 개발기

Kotlin BMI(비만도) 계산기 앱 만들기
Android/Kotlin

Kotlin BMI(비만도) 계산기 앱 만들기

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

'Android > Kotlin' 카테고리의 다른 글

Kotlin 나만의 웹브라우저 만들기  (0) 2021.01.22
Kotlin 타이머 만들기  (0) 2021.01.18
Kotlin 간단 계산기 앱 만들기  (0) 2021.01.13
Kotlin 뷰와 레이아웃  (2) 2021.01.08
Kotlin 기본 문법_조건문, 배열, 함수  (0) 2021.01.05
    'Android/Kotlin' 카테고리의 다른 글
    • Kotlin 나만의 웹브라우저 만들기
    • Kotlin 타이머 만들기
    • Kotlin 간단 계산기 앱 만들기
    • Kotlin 뷰와 레이아웃
    dalgorithm
    dalgorithm

    티스토리툴바