에딧 텍스트에 한 줄 꽉차게 글자나 숫자를 입력한 상태에서, 한 번 더 글자나 숫자를 타이핑하면,
그 다음 줄로 자동으로 줄바꿈(개행) 시켜주잔아요?
그런데 자동으로 줄바꿈 시켜주는 것은, 강제 개행(enter키)과 다르게, 문자열로 인식하지 않더라구요.
문자열 개수를 비교해보면, 자동개행 된 것은 문자열의 개수만 토스트 메시지로 나타내주는데,
강제개행된 것은 문자열+강제개행된 개수까지 토스트 메시지로 나타내주더라구요.
문제는, 자동으로 줄바꿈 시켜주는 "자동 개행을 감지할 수 있는 코드가", 코틀린이나 안드로이드 스튜디오 중
에 "있느냐 하는 것"이에요. 개수를 감지하든, 자동 개행되는 행위 자체를 감지하든 상관 없습니다. 이것을 감
지하는 코드만 있으면, 제 문제는 완전히 해결되는데, 인터넷 검색으로는 찾을 수가 없네요...
editT2.addTextChangedListener(object : TextWatcher {
//입력 하기 전에 작동됩니다.
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
//s: CharSequence? : editT2에 현재 입력되어 있는 문자열을 인수로 받아오는 매개변수다.
//start: Int : editT2에 입력된 문자열을 변경하고자 할 때, 변경 시작 지점을 index 수치로 표현해주는 매개변수다. 커서와 드래그의 영향을 받는 수치 같다.
//count: Int : editT2에 입력된 문자열을 변경하고자 할 때, 드래그한 문자의 개수를 일반적인 수치로 표현해주는 매개변수다.
//after: Int : 새로 추가할 문자열의 수를 표현
}
//타이핑 되는 텍스트에 변화가 있으면 작동됩니다.
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
//s: CharSequence? : 변경 이후, editT2에 저장된 문자열을 인수로 받아오는 매개변수다.
//start: Int : 새로 추가된 문자열들의 시작점인 index값, 여러개의 문자열이 추가된 경우, 가장 왼쪽의 index값을 인수로 받아온다.
//before: Int : 새 문자열이 추가되면서, 드래그 해놓아서 "삭제된 기존 문자열의 개수"를 일반적인 수치로 표현해주는 매개변수다.
//count: Int : "새로 추가된 문자열의 개수"를 표현해주는 매개변수다.
}
//입력이 끝날 때 작동됩니다.
override fun afterTextChanged(s: Editable?) {
//s: Editable? : 타이핑이 끝난 후, editT2의 문자열을 인수로 받아오는 매개변수다.
//문자열의 개수가 일정량을 넘어서면, 자동으로 강제 개행하도록 코딩한다. 즉, editT3가 새로 추가되도록 코딩해놓는 것이다.
//문자열이 숫자 보다 훨씬 기니까, 문자열의 개수를 개행의 기준으로 삼자.
//문자열은 한 줄에 17개가 들어간다. 숫자는 27개가 한 줄에 들어간다.
//안드로이드 스튜디오는, 자동 개행을 문자열로 인정하지 않는다. 그러므로 자동 개행은 문자열의 개수에 포함되지 않는다.
//그러나 강제 개행(enter키)은 문자열의 개수에 포함된다. 그러므로, 17개의 문자열을 입력하면, 강제 개행을 시켜줘야 한다.
//그러므로, 문자열의 개수와, 강제 개행키의 개수와 합하여, editT3를 추가할지 말지를 결정하면 되는 것이다...
Toast.makeText(this@QuestionMemoActivity, "${s?.length}", Toast.LENGTH_SHORT).show()
//뷰의 크기 구하는 코드. oncreat()함수 내부에서는 구할 수 없고, 리스너 내부나, oncreat()함수 밖에 작성해줘야 한다.
/*
editT2.getViewTreeObserver().addOnGlobalLayoutListener(object: ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
//뷰의 생성된 후 크기와 위치 구하기
numbers = editT2.getHeight()
Toast.makeText(this@QuestionMemoActivity, "$numbers", Toast.LENGTH_SHORT).show()
//리스너 해제
editT2.getViewTreeObserver().removeOnGlobalLayoutListener(this)
}
})*/
}
})