[Android/Flutter 교육] 29일차

MSU·2024년 2월 6일

Android-Flutter

목록 보기
30/85
post-thumbnail

내가 만든 프로젝트의 경우 동물을 담을 리스트를 MainActivity에서 생성했는데
강사님은 따로 Util클래스를 만들어 컴패니언 오브젝트에다가 리스트를 생성해서 사용을 했다.

Android Project1

buttonGroup의 기본값 체크 방법

체크할 개별 버튼에 이벤트를 주는 대신
버튼 그룹의 check()메서드를 이용
체크할 버튼의 id를 넣어준다.
ex) buttonGroupInputGender.check(R.id.buttonInputGender1)

buttonGroup의 체크 이벤트 리스너 적용 방법

    fun setEvent(){
        activityInputBinding.apply {
            // 동물 타입 버튼 그룹
            buttonGroupInputType.addOnButtonCheckedListener { group, checkedId, isChecked ->

                // 전부 다 안보이는 상태로 변경한다.
                containerInputType1.isVisible = false
                containerInputType2.isVisible = false
                containerInputType3.isVisible = false

                // 현재 체크되어 있는 버튼에 따라 보여지는 부분을 달리한다.
                when(buttonGroupInputType.checkedButtonId){
                    // 사자
                    R.id.buttonInputType1 -> {
                        containerInputType1.isVisible = true
                    }
                    // 호랑이
                    R.id.buttonInputType2 -> {
                        containerInputType2.isVisible = true
                    }
                    // 기린
                    R.id.buttonInputType3 -> {
                        containerInputType3.isVisible = true
                    }
                }
            }
        }
    }

포커스를 잃었을때 키보드를 내리는 법

ios에서는 포커스여부에 따라 키보드가 자동으로 올라오고 내려간다
하지만 안드로이드에서는 포커스 여부와 별개로 키보드를 올리고 내리는걸 직접 해줘야 한다.

버튼 선택에따라 보여졌다 가려지는 input요소의 경우, 포커스가 되었다가 사라진다음 다시 나타났을때 포커스도 사라진다. 이때 올라와있던 키보드는 내려가지 않고 그대로 올라와 있는 상태라 키보드를 눌러도 아무런 입력이 일어나지 않는다.
따라서 포커스가 사라졌을 때 키보드를 내려주는 코드를 직접 작성해주면 된다.
반대로 사용자의 터치가 아니라 프로그래머가 포커스를 주고 키보드를 올려주는 작업도 코드로 직접 작성이 필요하다.

Util.kt 클래스파일로 작성하여 companion object로 작성한다.

class Util {

    companion object{
        // 포커스를 주고 키보드를 올려주는 메서드
        fun showSoftInput(view: View, context:Context){
            // 포커스를 준다.
            view.requestFocus()

            thread {
                SystemClock.sleep(1000)
                val inputMethodManager = context.getSystemService(AppCompatActivity.INPUT_METHOD_SERVICE) as InputMethodManager
                inputMethodManager.showSoftInput(view, 0)
            }
        }

        // 키보드를 내려주는 메서드
        fun hideSoftInput(activity:AppCompatActivity){
            // 현재 포커스를 가지고 있는 view가 있다면 키보드를 내린다.
            if(activity.window.currentFocus != null){
                val inputMethodManager = activity.getSystemService(AppCompatActivity.INPUT_METHOD_SERVICE) as InputMethodManager
                inputMethodManager.hideSoftInputFromWindow(activity.window.currentFocus?.windowToken, 0)
            }
        }
    }
}

등록 화면으로 이동 시 이름 입력칸에 자동으로 포커스를 주고 키보드를 올리도록 설정

    // View들의 초기 상태를 설정한다.
    fun initView() {
        activityInputBinding.apply {
            // 이름 입력칸에 포커스를 준다.
            Util.showSoftInput(activityInputBinding.textFieldInputName,this@InputActivity)
        }
    }

Context

어떠한 정보를 전달하기 위해 필요한 정보를 담아놓은 것
기본적으로 액티비티는 context를 상속받음
따라서 context를 전달할 때 this@MainActivity를 전달하는 식으로 사용함

slider 기본 값 설정할 때

입력요소 초기화 시 slider의 최소값을 설정한 경우 숫자값을 직접 입력하기보다는 valueFrom 값으로 설정할 수 있다.

sliderInputWeight.value = sliderInputWeight.valueFrom

slider 값 변경에 따라 텍스트뷰에 값 표시

    // View들의 이벤트 설정
    fun setEvent(){
        activityInputBinding.apply {
            // 호랑이 몸무게 슬라이더
            // 두 번째 : 현재 설정된 값
            // 세 번째 : 코드가 아닌 사용자에 의해서 값이 변경될 경우 true를 전달해줌
            sliderInputWeight.addOnChangeListener { slider, value, fromUser ->
                // 텍스트 뷰에 출력한다.
                textViewInputWeight.text = "몸무게 : ${value.toInt()}kg"

            }
        }
    }

동물 객체를 담을 리스트는 컴패니언 오브젝트에 생성

class Util {

    companion object{

        // 동물 객체들을 담을 리스트
        val animalList = mutableListOf<Animal>()

    }
}

동물 종류, 성별은 enum 클래스로 정의

class Util {

}


// 동물 종류
enum class AnimalType(num:Int, str:String){
    ANIMAL_TYPE_LION(0,"사자"),
    ANIMAL_TYPE_TIGER(1,"호랑이"),
    ANIMAL_TYPE_GIRAFFE(2,"기린")
}

// 호랑이 성별
enum class TIGER_GENDER(num:Int, str:String){
    TIGER_GENDER1(0,"암컷"),
    TEGER_GENDER2(1,"수컷")
}



※ 출처 : 멋쟁이사자 앱스쿨 2기, 소프트캠퍼스 
profile
안드로이드공부

0개의 댓글