[안드로이드 프로그래밍] 키보드 & 커서 제어

PUJIN·2023년 6월 8일
0

android programming

목록 보기
4/26
post-thumbnail

1. 어플리케이션 실행시 키보드 보여주기

  • 현재 포커스를 가지고 있는 view와 연결된 키보드 보여주기
  • thread 운영하여 키보드 보여주기
    • onCreate method 이후 화면 생성
      → thread 사용하지 않으면 그 전에 명령을 전달하여 키보드가 나타나지 않는다.
    • onCreate 메서드의 수행이 끝날 때까지 대기
  • getSystemService : 안드로이드 OS가 관리하는 background service
class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)
        
        activityMainBinding.run {
            thread {
                SystemClock.sleep(500);
                val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
                imm.showSoftInput(currentFocus, 0);
            }
        }
    }
}
class MainActivity : AppCompatActivity() {

    lateinit var activityMainBinding: ActivityMainBinding
    lateinit var imm: InputMethodManager

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        
        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

        imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager

        activityMainBinding.run {
            thread {
                SystemClock.sleep(500)
                imm.showSoftInput(currentFocus,0)
            }
        }
    }
}



2. 커서 생성

  • 생성된 문자열 앞에 커서 생성
requestFocus()
setText("문자열 생성")
  • 생성된 문자열 뒤에 커서 생성
setText("문자열 생성")
requestFocus()



3. 엔터키 눌렀을 때 포커스 이동

  • true : 엔터키 누른 후 키보드 유지
  • false : 엔터키 누른 후 키보드 없애기
setOnEditorActionListener { v, actionId, event ->
	textView.text = text.toString()
    false
}



4. 입력 완료 후 키보드 없애기

val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
if(currentFocus != null) {
	imm.hideSoftInputFromWindow(currentFocus!!.windowToken, 0)
}



5. 입력 완료 후 커서 없애기

if(currentFocus != null) {
	currentFocus!!.clearFocus()
}

* 키보드 제거 후 커서 제거
→ 포커스부터 제거하는 경우 currentFocus가 없어 오류 발생

0개의 댓글