[TIL] App 실습 - BMI 계산기(2)

Yanus·2024년 4월 2일

ImageView 수정하기

imageView에 사진을 추가하기위해 원하는 사진들을
res\drawable 경로에 저장하였다.

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_marginTop="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView7"
        android:src="@drawable/emo1" />

기본 아바타 사진을 삭제하고 drawable 경로의 사진으로 변경하였다.
android:src="@drawable/사진경로"

프로퍼티를 수정하였다.
layout_width: 가로길이 설정
layout_height: 세로길이 설정

View객체 ID 수정하기

화면을 완성하였으나 아이템들의 아이디가 @+id/textView와 같이 default로 설정되어있다.
모든 아이템 id를 식별하기 좋은 이름으로 설정해보자.
@+id/tv_main_title 와 같이 id를 변경하면
xml 파일에서 textView id를 사용하는 모든곳에서 값들을 수정해주어야한다.

View객체 가져오기

findViewById<View클래스>(View아이디)

코틀린 코드에서 원하는 View에 접근하기위해 findViewById 메소드를 사용한다.

        val heightEditText = findViewById<EditText>(R.id.et_height)
        val weightEditText = findViewById<EditText>(R.id.et_weight)
        val checkButton = findViewById<Button>(R.id.btn_check)

버튼 클릭 event Listener

        checkButton.setOnClickListener {
// 클릭시 하는 동작설정 (OnClickListener 설정)
        }

버튼 클릭 이벤트가 발생하는 경우 버튼 클래스 내부에 정의되어있는 OnClickListener 메소드가 호출된다.

버튼 컴포넌트의 setOnClickListener 메소드를 통해 구체적인 동작을 지정할 수 있다.

        btn_back.setOnClickListener {
            finish()
        }

예를 들어 Result화면에서 finish() 메소드를 호출하면
화면이 종료되고 Main화면으로 이동한다.

Toast 메시지 띄우기

            if(heightEditText.text.isEmpty())
            {
                Toast.makeText(this, "신장을 입력해주세요.", Toast.LENGTH_SHORT).show()
                return@setOnClickListener
            }

사용자 입력이 잘못되었을 경우에 대한 예외처리 코드를 작성하였다.
토스트 메세지를 띄우고 해당 Listener를 종료한다.

return@setOnClickListener

@은 return 대상을 구분해준다. setOnClickListener 함수가 종료된다.

Toast.makeText(this, "메시지", 지속시간).show()

makeText().show() 메소드로 토스트 메세지를 지정하고 화면에 보여줄 수 있다.

Intent로 Activity 전환

Intent(this, Activity클래스이름::class.java)

MainActivity에서 ResultActivity로 전환을 하고자 하면 Intent를 생성해준다. this는 현재 context를 의미한다.

<MainActivity.kt>

            val height: Int = heightEditText.text.toString().toInt()
            val weight: Int = weightEditText.text.toString().toInt()

            val intent = Intent(this, ResultActivity::class.java)
            intent.putExtra("height", height)
            intent.putExtra("weight", weight)
            startActivity(intent)

putExtra 메소드로 다음 Activity에 전달하고자 하는 값들을 (Key, Value)쌍으로 저장해준다.
startActivity(intent객체) 메소드를 호출하면 화면이 전환되는 것을 확인할 수 있다.

<ResultActivity.kt>

        val height = intent.getIntExtra("height", 0)
        val weight = intent.getIntExtra("weight", 0)

전환된 화면에서는 getExtra 메소드에 Key를 입력하여 데이터 값들을 받아올 수 있다.

TextView, ImageView 메소드 사용

        val tv_resValue = findViewById<TextView>(R.id.tv_res_value)
        val tv_resText = findViewById<TextView>(R.id.tv_res_text)
        val iv_image = findViewById<ImageView>(R.id.iv_image)

        tv_resValue.text = value.toString()
        tv_resText.text = resultText
        tv_resText.setTextColor(resColor)
        iv_image.setImageResource(resImage)

findViewById로 View 객체들을 불러온 후에
원하는 텍스트, 사진 데이터 값으로 View 객체를 설정했다.

TextView
.text 프로퍼티
.setTextColor(color값) 메소드

ImageView
.setImageResource(image값) 메소드

profile
양우성

0개의 댓글