📜 TIL

[Android] 화면 이동하자마자 키보드가 생기며 입력창에 포커스 맞추는 기능 구현

둥굴둥굴둥굴레차 2023. 2. 19. 14:34

결과물

 

 

회원가입으로 넘어가자마자 바로 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"

적용해준 결과

 


 

제 글이 당신에게 도움이 되었길 바랍니다.

추가적인 질문은 언제든지 환영해요.

 

인상깊게 보셨다면 광고 하나만 클릭해주세요! 정말 큰 힘이 됩니다~! 🤠