Android EditView '완료'버튼을 만들고 클릭 할 때 키보드를 숨기려면 어떻게해야합니까?


115

사용자가를 클릭하면 EditViewAndroid가 키보드를 열어 사용자가 EditView.

문제는 사용자가 쓰기를 마치면 키보드를 숨길 방법이 없다는 것입니다. 사용자는 키보드를 숨기려면 뒤로 버튼을 눌러야합니다.

Done키보드를 숨기는 버튼을 키보드에 표시하는 방법이 있습니까?


답변:


139

TextView.setImeOptions를 사용 하고 actionDone을 ​​전달합니다. 처럼textView.setImeOptions(EditorInfo.IME_ACTION_DONE);


8
textView.setImeOptions(EditorInfo.IME_ACTION_DONE);
sulai

14
textView.singleLine(true)프로그래밍 방식으로 작동 하도록 추가해야했습니다 .
Jacksonkr

그러나 이것은 안드로이드 2.3부터 지원되지 않습니다
수밋 쿠마 사하

148

먼저 아래와 같이 대상 EditText와 android:imeOptions동일한 속성 을 설정해야 actionDone합니다. 그러면 EditText 소프트 키보드의 'RETURN'버튼이 'DONE'버튼으로 변경됩니다.

<EditText 
    android:id="@+id/edittext_done"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Enter some text"
    android:imeOptions="actionDone"
    />

@Michael이 해당 링크를 제거했습니다. 감사합니다
Paresh Mayani 2013 년

19
나는 추가했다 android:singleLine="true"XML을 통해 작업이 얻을
Jacksonkr

4
android : singleLine은 더 이상 사용되지 않습니다. android : maxLines = "1"을 사용합니다.
FariborZ

예 @FariborZ singleLine은 이제 더 이상 사용되지 않습니다.
Paresh Mayani

1
중요 참고 : singleLine은 maxLines와 동일하지 않습니다. 이 오해는 모든 사람에게 많은 문제를 야기합니다. stackoverflow.com/questions/30879471/…
milosmns

86

다음을 모두 포함하십시오 .imeOptions singleLine

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:singleLine="true"
   />

35
android:imeActionLabel="Done" 
android:singleLine="true"

XML 파일에서 잘 작동합니다. 그러나 이것은 또한 editText당신이 원하지 않을 수도있는 한 줄에 계속 입력하게 할 것입니다. 따라서 코드에 다음을 추가하면 모든 것을 한 줄에 입력하지 않아도됩니다.

mainText.setHorizontallyScrolling(false);
mainText.setMaxLines("Maximum integer value that you want to provide");

1
감사합니다. 데모는 12에 있었고 시간은 11:58이었고 당신은 11:59에 제 문제를 해결했습니다. : p
shahzain ali

android : singleLine = "true"는 더 이상 사용되지 않습니다. 따라서 android : lines = "1"
Gowtham을 사용합니다. R.

20

완료 버튼

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

android:inputType="text" XML에서

키보드에서 클릭 완료 처리

    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE){
                // Your action on done
                return true;
            }
            return false;
        }
    });

`


14

이것을 사용하십시오 :

android:singleLine="true"

예 ... 그렇지 않으면 다음 줄로 이동하는 것과 키보드를 닫는 것을 어떻게 구분할까요?
jstewart379 2014-06-26

이것이 나를 위해 일하게 된 것입니다. actionDone일부 장치가 다르게 반응하는 경우를 대비하여 거기에있는 것도 오류로 결정했습니다 .
Jacksonkr

10

이 두 줄을 사용하여 EditText

android:imeActionLabel="Done"
android:singleLine="true"

또는이 줄에 의해 프로그래밍 방식으로 달성 할 수 있습니다.

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

7

위젯의 속성이 변경되지 않으면 android:imeOptions="actionDone"레이아웃 xml파일 에서 와 같이 사용하는 것이 더 나을 수 있습니다 .




5

ActionDone은 키보드가 숨겨 졌을 때 키보드에서 다음 버튼을 클릭 할 때 사용합니다. 텍스트 편집 또는 AppcompatEdit에서 사용합니다.

XML

1.1 AppCompatEdittext를 사용하는 경우

    <android.support.v7.widget.AppCompatEditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

1.2 Edittext를 사용하는 경우

    <EditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

자바

EditText edittext= (EditText) findViewById(R.id.edittext);
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);

5

많은 사람들이 문제를 알지 못하는 사이에 어려움을 겪을 수 있다는 점을 지적해야합니다.

클릭하면 당신은 숨길 수있는 KB를 원하는 경우에 Done, 당신은 설정 android:imeOptions="actionDone"android:maxLines="1" 없이 당신 글고 설정 inputType은 것입니다 NOT 기본값으로 작업 inputType글고 치기위한이 아닌 "text"많은 사람들이 생각하는 것처럼.

이렇게 만 설정하면 inputType당신이 원하는 결과를 줄 것이다 무엇 이건 당신이 좋아하는 설정하는 것 "text", "number"등 ....


2

실제로 사용자 지정 텍스트를 작은 파란색 버튼으로 설정할 수 있습니다. xml 파일에서

android:imeActionLabel="whatever"

EditText에서.

또는 자바 파일 사용

etEditText.setImeActionLabel("whatever", EditorInfo.IME_ACTION_DONE);

이 함수의 두 번째 매개 변수에 들어갈 내용의 예로 IME_ACTION_DONE 을 임의로 선택 합니다. 이러한 작업의 전체 목록은 여기에서 확인할 수 있습니다 .

이로 인해 모든 장치의 모든 키보드에 텍스트가 나타나는 것은 아닙니다. 일부 키보드는 해당 버튼의 텍스트를 지원하지 않습니다 (예 : swiftkey). 그리고 일부 장치도 지원하지 않습니다. 좋은 규칙은 버튼에 이미 텍스트가있는 경우 원하는대로 변경한다는 것입니다.


2

Kotlin 솔루션

Kotlin에서 키보드 숨기기 + 작업 완료를 처리하는 직접적인 방법은 다음과 같습니다.

// Set action
edittext.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        // Hide Keyboard
        val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
        true
    }
    false
}

Kotlin 확장

이것을 사용 edittext.onDone {/*action*/}하여 기본 코드 를 호출 하십시오. 더 읽기 쉽고 유지 관리 가능

edittext.onDone { edittext.hideKeyboard() }

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

fun EditText.onDone(callback: () -> Unit) {
    // These lines optional if you don't want to set in Xml
    imeOptions = EditorInfo.IME_ACTION_DONE
    maxLines = 1
    setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            callback.invoke()
            true
        }
        false
    }
}

추가 키보드 확장

키보드 작업을 단순화하는 더 많은 방법 (표시, 닫기, 초점)이 필요한 경우 : 이 게시물 읽기

코드에없는 경우이 옵션을 edittext XML에 추가하는 것을 잊지 마십시오.

<EditText ...
    android:imeOptions="actionDone"
    android:inputType="text"/>

inputType="textMultiLine"지원이 필요하십니까 ? 이 게시물을 읽고 Xml 에 imeOptions또는 추가하지 마십시오.inputType


0

당신의 관점에서 이것을 사용하십시오

<EditText 
    ....
    ....
    android:imeOptions="actionDone" 
    android:id="@+id/edtName"
    />

0

사용하는 경우

android:imeOptions="actionDone" 

그런 다음 사용해야합니다

android:inputType="text"

키보드에서 작업 완료 버튼 만 볼 수 있습니다.


0

버튼이 전혀 필요하지 않은 경우 (예 : 탭이 위치를 지정할 수없고 싱글 / 더블 / 롱 탭에 의존하는 시각 장애인을위한 GUI를 개발 중입니다) :

text.setItemOptions(EditorInfo.IME_ACTION_NONE)

또는 Kotlin에서 :

text.imeOptions = EditorInfo.IME_ACTION_NONE
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.