본문 바로가기
Project/안드로이드 프로젝트(RandomColorChart)

Android Studio, Kotlin] 3. EditText의 정수값의 범위를 제한하는 방법

by 김마리님 2021. 1. 8.

RGB코드는 2진수로 이루어진 값이기 때문에 최종적으로 0~255까지의 값만 넣을 수 있다.

 

- android.graphic.Color.rgb

Return a color-int from red, green, blue components. The alpha component is implicitly 255 (fully opaque). These component values should be \([0..255]\), but there is no range check performed, so if they are out of range, the returned color is undefined.

rgb 함수에서도 0-255까지로 값을 제한하고 있다.

그래서, if문으로 값을 제어한다.

 

제어법은 간단하다. 앞서서 얘기한 addTextChangedListener에서 afterTextChanged 에

 

                val red : Int = Integer.parseInt(editTextRed.text.toString())

                if(red > 255) {
                    editTextRed.setText(editTextRed.text.substring(0, editTextRed.length()-1))

                }

를 이용해 마지막 끝에 남은 값을 잘라버린다.

(substr 함수는, index(첫번째 매개변수)에서 몇개의 글자(두 번째 매개변수)를 남길까? 하고 묻는 함수이다.)

그럼 당연히 끝의 값만 잘리고, 나머지 값은 그대로 남게 되는 것이다.

 

다만, 이렇게 끝내면 사용성에서의 사소한 문제가 생기는데

커서가 강제로 앞으로 이동하는데, 이러면 생각보다 사용성이 굉장히.. 불편해진다. 이걸 방지하기 위해 if문 안 마지막 줄에

                    editTextRed.setSelection(editTextRed.length())

 

를 추가하면 커서가 처음으로 이동하는 것을 막을 수 있다.

                val red : Int = Integer.parseInt(editTextRed.text.toString())

                if(red > 255) {
                    editTextRed.setText(editTextRed.text.substring(0, editTextRed.length()-1))
                    editTextRed.setSelection(editTextRed.length())
                }

 

반응형