결과물
회원가입으로 넘어가자마자 바로 ID 입력창에 포커스가 맞춰지면서 Soft Keyboard가 자동으로 올라오게 만들기
우선 키보드 보이게 만드는 매서드 구현하자
InputMethodManager를 사용하여 해당 기능을 구현할 수 있다.
InputMethodManager manager=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
이렇게 우선 InputMethodManager를 만들고 키보드를 보여주는 매서드인 showSoftInput을 호출하자
manager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
만약 키보드를 숨기고 싶다면 hideSoftInputFromWindow를 사용하면 된다.
manager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
showSoftInput() 사용시 주의할 점은 첫 번째 매개변수로 들어가는 뷰에 포커스가 있어야만 키보드가 생성된다!!
포커스가 없어서 해당 뷰에 포커스를 주게 하려면 다음과 같이 하면 된다.
editText.requestFocus();
manager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
내 프로젝트에 적용한 결과
→ showSoftKeyboard매서드를 JoinFragment.kt에 만들어두고 onCreateView안에서 실행되게끔 만듦!
class JoinFragment : Fragment() {
private var _binding: FragmentJoinBinding? = null
private val binding get() = _binding!!
private lateinit var callback: OnBackPressedCallback
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentJoinBinding.inflate(inflater, container, false)
val view = binding.root
initView()
showSoftKeyboard()
return view
}
private fun initView() {
...
}
private fun showSoftKeyboard() {
val imm =activity?.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager?
if (imm != null) {
binding.joinIdInput.requestFocus()
imm.showSoftInput(binding.joinIdInput, SHOW_IMPLICIT)
}
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
- 반드시 requestFocus함수 이용해 포커스 요청해야함
- 포커스가 없는 상태라면 키보드 나타나지 않기 때문
- InputMethodManager가 제공하는 showSoftInput( )의 SHOW_IMPLICIT를 이용해 키보드 보이게 함
💡 getSystemService앞에 activity를 붙여준 이유?
- 내가 이 매서드를 사용한 곳은 Fragment파일이기 때문에 activity를 호출해줘야함
- 정확한 설명은 아니지만 activity가 OS단이랑 더 가까우며, Fragment는 activity에 종속되어있기 때문에 activity를 호출해줘야한다고 이해함
- 만약 내가 InputMethodManager를 activity에서 사용했다면 안붙여줘도됨!
키보드를 보이게 만들 때 또 하나 더 설정해줘야한다.
바로 액티비티 화면 조정을 어떻게 할 것인지에 대한 설정!
이 설정은 Manifest.xml에서 해주면 된다.
나는 키보드가 올라올 때 액티비티의 크기를 조정하고 싶어서 다음의 속성을 Manifest.xml에 기재하였다.
적용한 속성
android:windowSoftInputMode="adjustPan"
적용해준 결과
제 글이 당신에게 도움이 되었길 바랍니다.
추가적인 질문은 언제든지 환영해요.
인상깊게 보셨다면 광고 하나만 클릭해주세요! 정말 큰 힘이 됩니다~! 🤠
'📜 TIL' 카테고리의 다른 글
[Android] 안드로이드 개발자 면접질문 정리 part 1 (0) | 2023.02.22 |
---|---|
[Android] Retrofit활용해 서버와 통신 및 okHttp로 로그찍어보기 (0) | 2023.02.20 |
[Android] OnBackPressedCallback 사용하여 뒤로가기(Back Press) 구현하기 (0) | 2023.02.17 |
[Android] 로그인 시 아이디 패스워드 유효성 검사하는 로직 만들기 (1) | 2023.02.15 |
[Android] 패스워드 아이콘이 글자가 존재할 때만 보이도록 만들기 (0) | 2023.02.13 |