갑자기 글자 수 표시가 하고 싶어졌다.
일반적으로 글을 작성할 때 아래쪽에 최대 글자 수 및 현재 입력된 글자 수를 표기되는 것을 보았다. 갑자기 그게 구현하고 싶어져서 열심히 찾아보고 구현했다.
위와 같이 내용을 작성하는 곳의 우측 하단에 0 / 2000 으로 최대 글자 수(2000)과 현재 입력된 글자 수(0)를 표기해주었다.
그 아래에는 최대 100줄의 문장을 입력할 수 있다고 명시해두었다.
내용 설명
[안드로이드[Android]] - 안드로이드[Android] EditText 입력 글자 수, 문장 수 제한하기
위의 링크에서 보다 자세하게 EditText에서 입력 받는 글자 수, 문장 수 제한하는 방법을 설명해두었다.
위의 기능을 구현하기 위한 코드는 프레그먼트의 onViewCreated() 내부에 작성해주었다. writeContent는 내용에 적히는 부분이고 countText는 0 / 2000 이 부분이다.
에딧텍스트에 입력되는 것을 감지하기 위해 가장 먼저 리스너를 설정해주었다.
with(binding) 스코프 함수 내부에 위의 코드를 작성하였기 때문에 에딧텍스트, 텍스트뷰에 접근할 때 binding을 해주지 않아도 된다.
override 함수 세종류는 윈도우라면 ctrl + i 맥이라면 cmd + i를 눌러 가져올 수 있다.
writeContent.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(pos: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun afterTextChanged(p0: Editable?) {
}
})
각 메서드에 대한 설명은 아래 표에 나와있다. 더 자세한 정보는 공식문서 참조
가장 먼저 문장의 줄, 글자 수의 제한이 걸리기 전까지 문자열을 입력 받을 변수 maxContent를 선언해주었다. 그리고 beforeTextChanged 안에서 maxContent = pos.toString()을 해주어 입력 받은 문자열을 maxContent에 넣어주도록 하였다.
그 후 afterTextChanged에서 유저가 입력 받은 내용을 userInput에 저장을 해준다.
만약 입력 받은 글자, 문장 수가 제약을 초과하는 경우 (글자 수는 2,000, 문장수는 100줄로 설정함.)
커서는 글자 맨 마지막에 있고 Toast를 통해 글자 수, 문장 수를 초과했다고 알려줄 수 있도록 했다.
with(binding){
writeContent.addTextChangedListener(object : TextWatcher{
var maxContent = ""
override fun beforeTextChanged(pos: CharSequence?, p1: Int, p2: Int, p3: Int) {
maxContent = pos.toString()
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
var userInput = writeContent.text.toString()
// 최대 문장 수가 100줄을 초과할 경우
if (writeContent.lineCount > 100){
Toast.makeText(context, "최대 문장 수를 초과했습니다."
,Toast.LENGTH_SHORT).show()
writeContent.setText(maxContent)
writeContent.setSelection(writeContent.length())
countText.setText(userInput.length.toString() + " / 2000\n" +
"최대 100줄")
// 최대 글자 수가 2000자를 초과할 경우
} else if (userInput.length >= 5){
Toast.makeText(context, "최대 글자 수를 초과했습니다."
,Toast.LENGTH_SHORT).show()
writeContent.setText(maxContent)
writeContent.setSelection(writeContent.length())
countText.setText(userInput.length.toString() + " / 2000\n" +
"최대 100줄")
}else {
countText.text = userInput.length.toString() + " / 2000\n" +
"최대 100줄"
}
}
override fun afterTextChanged(p0: Editable?) {
}
})
}
우선 XML에서 설정할 수 있는 EditText의 maxLines 요놈 아주 교활한 친구이다. 처음에 당연히 maxLines로 간단하게 입력받는 문장 수 제한 해야지~~~ 했는데... 원하는대로 되지 않길래 찾아보니 maxLines는 단순히 보여주는 최대 줄 수 를 정해주는 부분이었다...
'프로젝트들[Projects] > 위로[GoUp]' 카테고리의 다른 글
[위로] 안드로이드 앱 게시글 삭제 메커니즘 변경 / 신고 기능 추가 (0) | 2022.03.17 |
---|---|
[위로] 버그 수정(프레그먼트 생명 주기 관련) (0) | 2022.03.16 |
[위로][안드로이드] 위로 프로젝트 시작(~ing) (0) | 2022.03.15 |
최근댓글