ImeOptions의 완료 버튼 클릭은 어떻게 처리합니까?
나는 먹고 있습니다.EditText
여기서 사용자가 텍스트 편집을 클릭할 때 키보드에 완료 단추를 표시할 수 있도록 다음 속성을 설정합니다.
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
사용자가 화면 키보드에서 완료 단추를 클릭할 때(입력이 완료됨),RadioButton
주.
화면 키보드에서 버튼을 눌렀을 때 완료된 버튼을 어떻게 추적할 수 있습니까?
저는 결국 로버츠와 치라그의 대답을 함께 하게 되었습니다.
((EditText)findViewById(R.id.search_field)).setOnEditorActionListener(
new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// Identifier of the action. This will be either the identifier you supplied,
// or EditorInfo.IME_NULL if being called due to the enter key being pressed.
if (actionId == EditorInfo.IME_ACTION_SEARCH
|| actionId == EditorInfo.IME_ACTION_DONE
|| event.getAction() == KeyEvent.ACTION_DOWN
&& event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
onSearchAction(v);
return true;
}
// Return true if you have consumed the action, else false.
return false;
}
});
업데이트: 위의 코드는 때때로 콜백을 두 번 활성화합니다.대신 Google 채팅 클라이언트에서 가져온 다음 코드를 선택했습니다.
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// If triggered by an enter key, this is the event; otherwise, this is null.
if (event != null) {
// if shift key is down, then we want to insert the '\n' char in the TextView;
// otherwise, the default action is to send the message.
if (!event.isShiftPressed()) {
if (isPreparedForSending()) {
confirmSendMessageIfNeeded();
}
return true;
}
return false;
}
if (isPreparedForSending()) {
confirmSendMessageIfNeeded();
}
return true;
}
사용해 보십시오. 필요한 작업에 적합합니다.
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//do here your stuff f
return true;
}
return false;
}
});
<EditText android:imeOptions="actionDone"
android:inputType="text"/>
Java 코드는 다음과 같습니다.
edittext.setOnEditorActionListener(new OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
Log.i(TAG,"Here you can write the code");
return true;
}
return false;
}
});
코틀린 솔루션
Kotlin에서 이를 처리하는 기본 방법은 다음과 같습니다.
edittext.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
callback.invoke()
return@setOnEditorActionListener true
}
false
}
코틀린 확장
전화할 때만 사용합니다.edittext.onDone{/*action*/}
당신의 메인 코드에서.코드를 훨씬 더 읽기 쉽고 유지 관리 가능하게 합니다.
fun EditText.onDone(callback: () -> Unit) {
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
callback.invoke()
return@setOnEditorActionListener true
}
false
}
}
이러한 옵션을 편집 텍스트에 추가하는 것을 잊지 마십시오.
<EditText ...
android:imeOptions="actionDone"
android:inputType="text"/>
지원이 필요한 경우 이 게시물을 읽으십시오.
저는 이 질문이 오래된 것이라는 것을 알지만, 무엇이 저에게 효과가 있었는지 지적하고 싶습니다.
Android Developers 웹사이트(아래 그림)의 샘플 코드를 사용해 보았지만 작동하지 않았습니다.그래서 EditorInfo 클래스를 확인해보니 IME_ACTION_SEND 정수값이 다음과 같이 지정되어 있었습니다.0x00000004
.
Android 개발자의 샘플 코드:
editTextEmail = (EditText) findViewById(R.id.editTextEmail);
editTextEmail
.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) {
/* handle action here */
handled = true;
}
return handled;
}
});
그래서, 나는 정수 값을 나의 것에 추가했습니다.res/values/integers.xml
파일.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="send">0x00000004</integer>
</resources>
그리고 나서, 나는 내 레이아웃 파일을 편집했습니다.res/layouts/activity_home.xml
하기와 같이
<EditText android:id="@+id/editTextEmail"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeActionId="@integer/send"
android:imeActionLabel="@+string/send_label"
android:imeOptions="actionSend"
android:inputType="textEmailAddress"/>
그리고 나서, 샘플 코드가 작동했습니다.
OnKeyListener를 설정하는 방법과 OnKeyListener가 Done 버튼을 청취하도록 하는 방법에 대한 자세한 내용입니다.
먼저 OnKeyListener를 클래스의 구현 섹션에 추가합니다.그런 다음 OnKeyListener 인터페이스에 정의된 기능을 추가합니다.
/*
* Respond to soft keyboard events, look for the DONE press on the password field.
*/
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER))
{
// Done pressed! Do something here.
}
// Returning false allows other listeners to react to the press.
return false;
}
지정된 EditText 개체:
EditText textField = (EditText)findViewById(R.id.MyEditText);
textField.setOnKeyListener(this);
대부분의 사람들이 직접 질문에 답했지만, 저는 그 뒤에 있는 개념에 대해 더 자세히 설명하고 싶었습니다.먼저, 기본 로그인 활동을 만들 때 IME의 주의를 끌었습니다.다음과 같은 코드가 생성되었습니다.
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_password"
android:imeActionId="@+id/login"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:singleLine="true"/>
이미 inputType 특성에 익숙해야 합니다.이것은 이메일 주소, 암호 또는 전화 번호와 같이 예상되는 텍스트 유형을 Android에 알려줄 뿐입니다.가능한 값의 전체 목록은 여기에서 확인할 수 있습니다.
하지만, 그것은 속성이었습니다.imeOptions="actionUnspecified"
Android를 작용할 수 있습니다.InputMethodManager
키보드의 아래쪽 모서리에는 현재 텍스트 필드에 따라 일반적으로 "다음" 또는 "완료"로 표시되는 단추가 있습니다.하면 Android를 사용하여 할 수 .android:imeOptions
발송 단추 또는 "다음" 단추를 지정할 수 있습니다.전체 목록은 여기에서 확인할 수 있습니다.
그러면 다음을 정의하여 동작 버튼의 누름을 들을 수 있습니다.TextView.OnEditorActionListener
를해위를 .EditText
들어 다음과 .예와 같이 다음을 수행합니다.
editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(EditText v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
//do here your stuff f
return true;
}
return false;
}
});
, 제 에는 이제제예저는서에저는▁had가 있었습니다.android:imeOptions="actionUnspecified"
키를 때 할 때 합니다.사용자가 Enter 키를 누를 때 로그인을 시도할 때 유용합니다.활동에서 이 태그를 검색한 다음 로그인을 시도할 수 있습니다.
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == R.id.login || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;
}
return false;
}
});
Kotlin의 Chikka.andev와 Alex Cohn 덕분에 다음과 같습니다.
text.setOnEditorActionListener { v, actionId, event ->
if (actionId == EditorInfo.IME_ACTION_DONE ||
event?.action == KeyEvent.ACTION_DOWN && event.keyCode == KeyEvent.KEYCODE_ENTER) {
doSomething()
true
} else {
false
}
}
서 저는 보겠다니습확인해▁for를 확인합니다.Enter
를 반환하기 에 반되기때니다입문환다▁key,니때▁it,입문.EditorInfo.IME_NULL
에 IME_ACTION_DONE
.
참고 항목AndroidimeOptions="actionDone"이(가) 작동하지 않습니다. 추가android:singleLine="true"
에 시대에EditText
.
첫 번째 수준 : 먼저 키보드에 모양 변경을 적용할 수 있도록 작업에 대해 다음 특성을 지정해야 합니다.
<androidx.appcompat.widget.AppCompatEditText
android:imeOptions="actionDone"
android:inputType="phone"
android:maxLength="11"
android:lines="1" />
두 번째 레벨:
phoneNumberET.setOnEditorActionListener(object: OnEditorActionListener {
override fun onEditorAction(v: TextView?, actionId: Int, event: KeyEvent?): Boolean {
if(EditorInfo.IME_ACTION_DONE == actionId){
handleLogin()
return true
}
return false
}
})
Android Annotations를 사용하는 경우 https://github.com/androidannotations/androidannotations
@EditorAction 주석을 사용할 수 있습니다.
@EditorAction(R.id.your_component_id)
void onDoneAction(EditText view, int actionId){
if(actionId == EditorInfo.IME_ACTION_DONE){
//Todo: Do your work or call a method
}
}
언급URL : https://stackoverflow.com/questions/2004344/how-do-i-handle-imeoptions-done-button-click
'programing' 카테고리의 다른 글
com.myql.jdbc.exceptions.jdbc4가 있는 이유는 무엇입니까?커뮤니케이션예외:통신 링크 고장 (0) | 2023.09.04 |
---|---|
jQuery agax는 IE 디버거가 열려 있을 때만 IE에서 작동합니다. (0) | 2023.09.04 |
PowerShell에서 서브루틴을 정의하는 방법 (0) | 2023.09.04 |
왜 PHP가 오류 코드 없이 mysqli_connect에 고착됩니까? (0) | 2023.09.04 |
jQuery를 사용하여 JavaScript 오브젝트 속성 반복 (0) | 2023.09.04 |