programing

ImeOptions의 완료 버튼 클릭은 어떻게 처리합니까?

lastmoon 2023. 9. 4. 20:35
반응형

ImeOptions의 완료 버튼 클릭은 어떻게 처리합니까?

나는 먹고 있습니다.EditText여기서 사용자가 텍스트 편집을 클릭할 때 키보드에 완료 단추를 표시할 수 있도록 다음 속성을 설정합니다.

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

사용자가 화면 키보드에서 완료 단추를 클릭할 때(입력이 완료됨),RadioButton주.

화면 키보드에서 버튼을 눌렀을 때 완료된 버튼을 어떻게 추적할 수 있습니까?

Screenshot showing the bottom right 'done' button on the software keyboard

저는 결국 로버츠와 치라그의 대답을 함께 하게 되었습니다.

((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.andevAlex 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_NULLIME_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

반응형