728x90
이번 코드를 통해 intent를 확실히 이해할 수 있었다.
다음과 같이 키와 몸무게를 직접 입력한 후,
comfirm 버튼을 누르면 새로운 창에 bmi를 계산한 값과 type을 알려준다.
bmi 계산기 만드는 순서
(1) 뷰바인딩 적용
- 저번에 내 포스팅을 참고하면 쉽다!
- build.gradle(Module)의 android 밑에 buildFeatures { viewBinding true } 작성 후, sync now
https://heaven0713.tistory.com/43?category=1001160
(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
'ⓢⓣⓤⓓⓨ > ⓐⓝⓓⓡⓞⓘⓓⓢⓣⓤⓓⓘⓞ' 카테고리의 다른 글
[Kotlin] 타이머 만들기 (0) | 2021.09.04 |
---|---|
[Kotlin] 조건문, 반복문 정리 (0) | 2021.08.31 |
[Kotlin] 리사이클러 뷰 (RecyclerView) (0) | 2021.08.25 |
[Kotlin] 네비게이션 뷰 (Navigation View) (0) | 2021.08.24 |
[Kotlin] 리스트 뷰 (ListView) (0) | 2021.08.23 |
댓글