[android] Android-EditText에서 “Enter”처리

사용자가 누르는 것을 처리하는 방법이 있는지 궁금합니다. EnterEditTextonSubmit HTML 이벤트와 같은 을 입력하는 동안 .

또한 “완료”단추에 다른 것으로 레이블이 지정되어 (예 : “이동”) 가상 키보드를 조작하고 클릭 할 때 (onSubmit과 같은) 특정 조치를 수행하는 방법이 있는지 궁금합니다.



답변

EnteronSubmit HTML 이벤트와 같은 EditText를 입력하는 동안 사용자가 처리하는 방법이 있는지 궁금합니다 .

예.

또한 “완료”단추에 다른 것으로 레이블이 지정되어 (예 : “이동”) 가상 키보드를 조작하고 클릭 할 때 (onSubmit과 같은) 특정 조치를 수행하는 방법이 있는지 궁금합니다.

또한 그렇습니다.

android:imeActionIdandroid:imeOptions속성과 setOnEditorActionListener()메소드 를 확인하고 싶을 것입니다 .TextView .

“완료”단추의 텍스트를 사용자 정의 문자열로 변경하려면 다음을 사용하십시오.

mEditText.setImeActionLabel("Custom text", KeyEvent.KEYCODE_ENTER);


답변

final EditText edittext = (EditText) findViewById(R.id.edittext);
edittext.setOnKeyListener(new OnKeyListener() {
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        // If the event is a key-down event on the "enter" button
        if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
            (keyCode == KeyEvent.KEYCODE_ENTER)) {
          // Perform action on key press
          Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
          return true;
        }
        return false;
    }
});


답변

여기 당신이하는 일이 있습니다. 또한 Android 개발자의 샘플 코드 ‘Bluetooth Chat’에 숨겨져 있습니다. “example” 이라고 굵게 표시된 부분은 자신의 변수 및 방법으로 바꾸십시오.

먼저 필요한 것을 메인 액티비티로 가져 와서 리턴 버튼으로 특별한 작업을 수행하십시오.

import android.view.inputmethod.EditorInfo;
import android.widget.TextView;
import android.view.KeyEvent;

이제 리턴 키에 대해 TextView.OnEditorActionListener 유형의 변수를 작성하십시오 (여기서는 exampleListener 사용 ).

TextView.OnEditorActionListener exampleListener = new TextView.OnEditorActionListener(){

그런 다음 리턴 버튼을 누를 때 수행 할 작업에 대해 리스너에게 두 가지를 알려야합니다. 우리가 말하는 EditText (여기서는 exampleView 사용 )를 알아야하며 Enter 키를 누를 때 무엇을 해야하는지 알아야합니다 (여기서는 example_confirm () ). 이것이 활동의 ​​마지막 또는 유일한 EditText 인 경우 제출 (또는 확인, 확인, 보내기, 저장 등) 단추의 onClick 메소드와 동일한 작업을 수행해야합니다.

public boolean onEditorAction(TextView exampleView, int actionId, KeyEvent event) {
   if (actionId == EditorInfo.IME_NULL
      && event.getAction() == KeyEvent.ACTION_DOWN) {
      example_confirm();//match this behavior to your 'Send' (or Confirm) button
   }
   return true;
}

마지막으로 리스너를 설정하십시오 (대부분의 onCreate 메소드에서).

exampleView.setOnEditorActionListener(exampleListener);


답변

하드웨어 키보드는 항상 입력 이벤트를 생성하지만 소프트웨어 키보드는 singleLine EditText에서 다른 actionID와 null을 반환합니다. 이 코드는 사용자가 EditText 또는 키보드 유형에 관계없이이 리스너가 설정된 EditText에서 enter를 누를 때마다 응답합니다.

import android.view.inputmethod.EditorInfo;
import android.view.KeyEvent;
import android.widget.TextView.OnEditorActionListener;

listener=new TextView.OnEditorActionListener() {
  @Override
  public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
    if (event==null) {
      if (actionId==EditorInfo.IME_ACTION_DONE);
      // Capture soft enters in a singleLine EditText that is the last EditText.
      else if (actionId==EditorInfo.IME_ACTION_NEXT);
      // Capture soft enters in other singleLine EditTexts
      else return false;  // Let system handle all other null KeyEvents
    }
    else if (actionId==EditorInfo.IME_NULL) {
    // Capture most soft enters in multi-line EditTexts and all hard enters.
    // They supply a zero actionId and a valid KeyEvent rather than
    // a non-zero actionId and a null event like the previous cases.
      if (event.getAction()==KeyEvent.ACTION_DOWN);
      // We capture the event when key is first pressed.
      else  return true;   // We consume the event when the key is released.  
    }
    else  return false;
    // We let the system handle it when the listener
    // is triggered by something that wasn't an enter.


    // Code from this point on will execute whenever the user
    // presses enter in an attached view, regardless of position, 
    // keyboard, or singleLine status.

    if (view==multiLineEditText)  multiLineEditText.setText("You pressed enter");
    if (view==singleLineEditText)  singleLineEditText.setText("You pressed next");
    if (view==lastSingleLineEditText)  lastSingleLineEditText.setText("You pressed done");
    return true;   // Consume the event
  }
};

singleLine = false에서 enter 키의 기본 모양은 구부러진 화살표 enter 키패드를 제공합니다. 마지막 EditText에서 singleLine = true이면 키는 DONE으로 표시되고 EditText에서는 NEXT로 표시됩니다. 기본적으로이 동작은 모든 바닐라, Android 및 Google 에뮬레이터에서 일관됩니다. scrollHorizontal 속성은 차이가 없습니다. 소프트 입력에 대한 전화의 응답이 제조업체에 남겨지고 에뮬레이터에서도 바닐라 레벨 16 에뮬레이터가 여러 줄의 긴 소프트 입력에 응답하고 actionId가 NEXT이고 이벤트.


답변

이 페이지는이를 수행하는 방법을 정확하게 설명합니다.

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

android : imeOptions 를 설정 한 다음 actionId를 확인하십시오. 를 . 따라서 imeOptions를 ‘actionDone’으로 설정하면 onEditorAction에서 ‘actionId == EditorInfo.IME_ACTION_DONE’을 확인합니다. 또한 android : inputType을 설정하십시오.

위에 링크 된 예제의 EditText는 다음과 같습니다.

<EditText
    android:id="@+id/search"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search_hint"
    android:inputType="text"
    android:imeOptions="actionSend" />

setImeOptions (int) 함수를 사용하여 프로그래밍 방식으로이를 설정할 수도 있습니다. 위에 링크 된 예제의 OnEditorActionListener는 다음과 같습니다.

EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});


답변

나는 이것이 1 살이라는 것을 알고 있지만, 이것이 EditText에 완벽하게 작동한다는 것을 알았습니다.

EditText textin = (EditText) findViewById(R.id.editText1);
textin.setInputType(InputType.TYPE_CLASS_TEXT);

텍스트와 공간을 제외한 모든 것을 방지합니다. 탭하거나 “반환”( “\ n”) 또는 다른 항목을 사용할 수 없습니다.


답변

Chad의 응답에 대한 부록 (거의 완벽하게 작동했습니다)과 마찬가지로 코드가 두 번 (키 업 및 키 다운 한 번) 실행되지 않도록 KeyEvent 작업 유형을 확인해야한다는 것을 알았습니다. 행사).

if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN)
{
    // your code here
}

동작 이벤트 반복 (Enter 키 보유) 등에 대한 정보는 http://developer.android.com/reference/android/view/KeyEvent.html 을 참조 하십시오 .