답변:
먼저 아래와 같이 대상 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"
/>
android:singleLine="true"
XML을 통해 작업이 얻을
android:imeActionLabel="Done"
android:singleLine="true"
XML 파일에서 잘 작동합니다. 그러나 이것은 또한 editText
당신이 원하지 않을 수도있는 한 줄에 계속 입력하게 할 것입니다. 따라서 코드에 다음을 추가하면 모든 것을 한 줄에 입력하지 않아도됩니다.
mainText.setHorizontallyScrolling(false);
mainText.setMaxLines("Maximum integer value that you want to provide");
완료 버튼
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;
}
});
`
이것을 사용하십시오 :
android:singleLine="true"
actionDone
일부 장치가 다르게 반응하는 경우를 대비하여 거기에있는 것도 오류로 결정했습니다 .
코드 :
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
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);
많은 사람들이 문제를 알지 못하는 사이에 어려움을 겪을 수 있다는 점을 지적해야합니다.
클릭하면 당신은 숨길 수있는 KB를 원하는 경우에 Done
, 당신은 설정 android:imeOptions="actionDone"
및 android:maxLines="1"
없이 당신 글고 설정 inputType
은 것입니다 NOT 기본값으로 작업 inputType
글고 치기위한이 아닌 "text"
많은 사람들이 생각하는 것처럼.
이렇게 만 설정하면 inputType
당신이 원하는 결과를 줄 것이다 무엇 이건 당신이 좋아하는 설정하는 것 "text"
, "number"
등 ....
실제로 사용자 지정 텍스트를 작은 파란색 버튼으로 설정할 수 있습니다. xml 파일에서
android:imeActionLabel="whatever"
EditText에서.
또는 자바 파일 사용
etEditText.setImeActionLabel("whatever", EditorInfo.IME_ACTION_DONE);
이 함수의 두 번째 매개 변수에 들어갈 내용의 예로 IME_ACTION_DONE 을 임의로 선택 합니다. 이러한 작업의 전체 목록은 여기에서 확인할 수 있습니다 .
이로 인해 모든 장치의 모든 키보드에 텍스트가 나타나는 것은 아닙니다. 일부 키보드는 해당 버튼의 텍스트를 지원하지 않습니다 (예 : swiftkey). 그리고 일부 장치도 지원하지 않습니다. 좋은 규칙은 버튼에 이미 텍스트가있는 경우 원하는대로 변경한다는 것입니다.
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
}
이것을 사용 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
당신의 관점에서 이것을 사용하십시오
<EditText
....
....
android:imeOptions="actionDone"
android:id="@+id/edtName"
/>
버튼이 전혀 필요하지 않은 경우 (예 : 탭이 위치를 지정할 수없고 싱글 / 더블 / 롱 탭에 의존하는 시각 장애인을위한 GUI를 개발 중입니다) :
text.setItemOptions(EditorInfo.IME_ACTION_NONE)
또는 Kotlin에서 :
text.imeOptions = EditorInfo.IME_ACTION_NONE