[android] Android-EditText에서 “Enter”처리
사용자가 누르는 것을 처리하는 방법이 있는지 궁금합니다. EnterEditText
onSubmit HTML 이벤트와 같은 을 입력하는 동안 .
또한 “완료”단추에 다른 것으로 레이블이 지정되어 (예 : “이동”) 가상 키보드를 조작하고 클릭 할 때 (onSubmit과 같은) 특정 조치를 수행하는 방법이 있는지 궁금합니다.
답변
EnteronSubmit HTML 이벤트와 같은 EditText를 입력하는 동안 사용자가 처리하는 방법이 있는지 궁금합니다 .
예.
또한 “완료”단추에 다른 것으로 레이블이 지정되어 (예 : “이동”) 가상 키보드를 조작하고 클릭 할 때 (onSubmit과 같은) 특정 조치를 수행하는 방법이 있는지 궁금합니다.
또한 그렇습니다.
android:imeActionId
및 android: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 을 참조 하십시오 .