티스토리 뷰


EditText는 기본적으로 엔터로 줄 바꿈이 되는, 여러 줄의 글자를 입력받습니다.

이 EditText를 사용해 아이디, 이름 등을 입력하게 하면, 사용자는 불필요한 터치를 반복해야만 합니다.
키보드의 엔터를 누르면 다음 입력란으로 넘어가는 것이 아닌 줄바꿈이 되기 때문이죠.

여기서 필요한 바로 그 "다음" 버튼을 만들어 보겠습니다.

* 참고 : 이 글은 2017년 1월에 작성된 글로, API 25버전, 즉 Android 7.1.1 (Nougat)을 기준으로 합니다.
* ...은 필수적으로 필요한 내용들(layout_width, layout_height 등)은 생략했다는 의미입니다.


순서는 아래와 같습니다.
1. (XML) EditText 위젯에 inputType 및 imeOptions 속성 추가
2. (JAVA) EditText 위젯에 OnEditorAction 리스너 추가

inputType속성은 입력할 데이터의 형식을 지정해 줍니다. 이 형식에 따라 키보드의 모양이 바뀝니다.
imeOptions속성은 키보드 우측 하단의 액션 버튼(일반적으로 엔터)의 형식을 지정해 줍니다.
OnEditorAction리스너는 EditText의 액션 버튼이 눌렸을 때 호출되는 리스너로, 어떤 작업을 수행하게 할지를 정해줍니다.


inputType에 따른 키보드 모양의 변화입니다.


imeOptions에 따른 액션 버튼의 변화입니다.

이제 코드로 구현해 봅시다.
제가 구현할 화면은 학번과 이름을 순서대로 입력받은 뒤, Search 버튼을 눌러 해당 데이터로 검색을 하는 액티비티입니다.

1. (XML) EditText에 inputType 및 imeOptions 속성 추가

<LinearLayout ...>
    <EditText ...
        android:id="@+id/edit_id"
        android:hint="학번을 입력하세요"
        android:inputType="numberDecimal" />
    <EditText ...
        android:id="@+id/edit_name"
        android:hint="이름을 입력하세요"
        android:inputType="text"
        android:imeOptions="actionSearch" />
</LinearLayout>

이름 입력란의 imeOptions에 actionSearch를 줌으로써 키보드의 단추가 돋보기 모양으로 바뀌게 합니다.
학번 입력란엔 imeOptions를 주지 않았는데, 아무 옵션도 주지 않으면 액션 버튼을 눌렀을 때 다음 EditText로 커서를 넘겨줍니다.

 

2. (JAVA) EditText에 OnEditorAction리스너 추가

EditText edit_id, edit_name; // 연결(findViewById)은 생략
edit_name.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override public boolean onEditorAction(TextView tv, int id, KeyEvent event) {
        if (id == EditorInfo.IME_ACTION_SEARCH) {
            // 검색 작업을 수행
        }
        return false;
    }
});

이름 입력란에 리스너를 달아 주었습니다. onEditorAction 메소드의 반환값이 boolean인데,
이 값이 false이면 버튼을 누른 뒤 리스너의 반응이 종료되지만, true이면 리스너의 반응이 종료되지 않습니다(호출이 계속됩니다).
또 다른 차이로 키보드가 내려가고 내려가지 않고의 차이도 있네요.

 

결과화면입니다.
 

학번을 입력하는 부분은 inputType을 numberDecimal로 설정하여 숫자 키패드가 출력되었고,
이름을 입력하는 부분은 inputType에 text를, imeOptions에 actionSearch를 설정하여 누르면 검색 기능을 수행하도록 하였습니다.
여기서 학번 입력 부분의 버튼이 "다음"으로 되어 있는데, 이는 EditText가 별도의 imeOptions 설정이 없으면 다음 EditText로 포커스를 자동으로 넘기는 기능을 갖고 있기 때문입니다.

이제 EditText의 키보드 모양, 버튼 모양을 변경하기 위해서는
inputTypeimeOptions를 변경해주세요!

 

참고 : https://developer.android.com/training/keyboard-input/style.html

댓글
댓글쓰기 폼