안드로이드 키보드 소스 질문입니다. input type에 맞는 키보드 표시 질문입니다.

조회수 5329회

안드로이드 키보드 소스 질문입니다. input type에 맞는 키보드 표시 질문입니다.

현재 키보드 소스로 테스트중입니다.

웹사이트에서 로그인을 할경우에 아이디와 패스워드를 클릭했을때는 영문키보드가 나오고 이외에는 한글 키보드가 나오게 하려고 하고 있습니다.

input type이 password 혹은 아이디입력란일경우(아이디 입력란이라는것을 체크할 수 있는지 의문입니다.) 해당 type 속성을 android에서 추출하는 방법을 알고 싶습니다.(간략한 샘플 희망) ( 혹은 이렇게 체크하는것이 맞는지도 의문입니다. )

또한 주소창을 클릭했을경우에는 아이디란을 클릭했을때와는 다른 영문 키보드가 나오도록 하려합니다.( www나 .com 등이 추가적으로 키보드에 표시되도록 하고싶습니다. )

이부분도 위와같이 어떻게 체크해야할지 감이 오지 않습니다.

현재 키보드는 정상적으로 작동하고 있는대요. 기본적으로 한글 키보드가 올라오도록 설정을 해놓은 상태입니다.

기본 키보드인 삼성키보드에서는 잘되는것을 확인해보았고 동일하게 구현을 해보려고하고 있습니다.

너무 막연하고 다소 두서없는 질문이라도 이해부탁드립니다. 따뜻한 조언 부탁드립니다.

이상입니다.

감사합니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 질문의 의도가 아래 내용이라 생각하고, 답변 남겼습니다. (잘못 이해했다면 알려주세요)

    키보드를 직접 구현 중이고, inputType에 따라 키보드 레이아웃을 다르게 보여주고 싶은데 어떻게 처리해야하는 것인지?

    안드로이드에서 키보드 구현은 키보드의 라이프 사이클을 다루는 InputMethodService 클래스를 상속받는 것이 시작입니다. 이 클래스의 onStartInput(), onStartInputView() 함수가 호출될 때 파라미터로 EditorInfo 객체를 전달하는데요. 이 객체를 통해서 현재 EditText의 inputType 정보를 가져올 수 있습니다.

    다음 코드를 보면 EditorInfo 객체에서 inputType을 어떻게 가져오는지 볼 수 있습니다. 코드가 길어 관련 부분만 복사했습니다. 전체 코드는 이곳에서 확인할 수 있습니다.

    @Override
    public void onStartInputView(final EditorInfo attribute,
                             final boolean restarting) {
    
        ...
    
        switch (attribute.inputType & EditorInfo.TYPE_MASK_CLASS) {
            case EditorInfo.TYPE_CLASS_DATETIME:
                mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_DATETIME,
                        attribute, restarting);
                break;
            case EditorInfo.TYPE_CLASS_NUMBER:
                mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_NUMBERS,
                        attribute, restarting);
                break;
            case EditorInfo.TYPE_CLASS_PHONE:
                mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_PHONE,
                        attribute, restarting);
                break;
            case EditorInfo.TYPE_CLASS_TEXT:
                final int variation = attribute.inputType& EditorInfo.TYPE_MASK_VARIATION;
                switch (variation) {
                    case EditorInfo.TYPE_TEXT_VARIATION_PASSWORD:
                    case EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD:
                    case 0xe0:// API 11 EditorInfo.TYPE_TEXT_VARIATION_WEB_PASSWORD:
                        mPredictionOn = false;
                        break;
                    default:
                        mPredictionOn = true;
                }
            }
    
        ...
    }
    

    그리고 구글에서 제공하는 안드로이드 키보드 샘플이 있습니다. 코드를 직접 받아서 실행해보면 도움이 될 것 같고요.

    위 샘플에서 inputType을 다루는 부분은 아래 링크의 166번 라인입니다.

    그리고 안드로이드 공식 문서인 Creating an Input Method도 참고하세요. 이 문서에서 'Handling different input types'를 검색해보면 관련된 내용을 다루고 있습니다.

    'www', 'com'과 같은 보조적인 키워드를 키보드에 표시하는 부분은 위 문서에서 'Candidates view' 부분을 참고하시기 바랍니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 너무나도 친절한 답변 감사드립니다. 많은 도움이 되었습니다. 감사합니다. 알 수 없는 사용자 2016.6.30 23:18

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)