내 응용 프로그램에는 사용자가 숫자를 입력 할 수있는 필드가 있습니다. 숫자 만 허용하도록 필드를 설정했습니다. 사용자가 필드를 클릭하면 키보드가 나타납니다. 키보드 (ICS)에는 완료 버튼이 있습니다. 키보드의 완료 버튼으로 응용 프로그램에있는 제출 버튼을 트리거하고 싶습니다. 내 코드는 다음과 같습니다.
package com.michaelpeerman.probability;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import java.util.Random;
public class ProbabilityActivity extends Activity implements OnClickListener {
private Button submit;
ProgressDialog dialog;
int increment;
Thread background;
int heads = 0;
int tails = 0;
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
setContentView(R.layout.main);
submit = ((Button) findViewById(R.id.submit));
submit.setOnClickListener(this);
}
public void onClick(View view) {
increment = 1;
dialog = new ProgressDialog(this);
dialog.setCancelable(true);
dialog.setMessage("Flipping Coin...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(0);
EditText max = (EditText) findViewById(R.id.number);
int maximum = Integer.parseInt(max.getText().toString());
dialog.setMax(maximum);
dialog.show();
dialog.setOnCancelListener(new OnCancelListener(){
public void onCancel(DialogInterface dialog) {
background.interrupt();
TextView result = (TextView) findViewById(R.id.result);
result.setText("heads : " + heads + "\ntails : " + tails);
}});
background = new Thread(new Runnable() {
public void run() {
heads=0;
tails=0;
for (int j = 0; !Thread.interrupted() && j < dialog.getMax(); j++) {
int i = 1 + new Random().nextInt(2);
if (i == 1)
heads++;
if (i == 2)
tails++;
progressHandler.sendMessage(progressHandler.obtainMessage());
}
}
});
background.start();
}
Handler progressHandler = new Handler() {
public void handleMessage(Message msg) {
dialog.incrementProgressBy(increment);
if (dialog.getProgress() == dialog.getMax()) {
dialog.dismiss();
TextView result = (TextView) findViewById(R.id.result);
result.setText("heads : " + heads + "\ntails : " + tails);
}
}
};
}
답변
이 것을 사용할 수도 있습니다 (EditText에서 작업을 수행 할 때 호출되도록 특수 리스너를 설정). DONE과 RETURN 모두에서 작동합니다.
max.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
Log.i(TAG,"Enter pressed");
}
return false;
}
});
답변
당신은 시도 할 수 있습니다 IME_ACTION_DONE
.
이 조치는 입력 할 내용이 없으면 “완료”작업을 수행하며 IME가 닫힙니다.
Your_EditTextObj.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_DONE) {
/* Write your logic here that will be executed when user taps next button */
handled = true;
}
return handled;
}
});
답변
이 시도:
max.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event){
if(keyCode == event.KEYCODE_ENTER){
//do what you want
}
}
});
답변
Xamarin.Android (Cross Platform)에 이것을 사용해보십시오.
edittext.EditorAction += (object sender, TextView.EditorActionEventArgs e) {
if (e.ActionId.Equals (global::Android.Views.InputMethods.ImeAction.Done)) {
//TODO Something
}
};
답변
코 틀린 솔루션
Kotlin에서 수행 된 작업을 처리하는 기본 방법은 다음과 같습니다.
edittext.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
// Call your code here
true
}
false
}
코 틀린 확장
이것을 사용 edittext.onDone {/*action*/}
하여 메인 코드 를 호출 하십시오. 더 읽기 쉽고 유지 관리 가능
edittext.onDone { submitForm() }
fun EditText.onDone(callback: () -> Unit) {
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
callback.invoke()
true
}
false
}
}
이 옵션을 편집 텍스트에 추가하는 것을 잊지 마십시오
<EditText ...
android:imeOptions="actionDone"
android:inputType="text"/>
inputType="textMultiLine"
지원 이 필요하면 이 게시물을 읽으십시오
답변
LoginActivity를 만들 때 AndroidStudio에서 다음 코드를 복사했습니다. ime 속성을 사용합니다
레이아웃에서
<EditText android:id="@+id/unidades" android:layout_width="match_parent"
android:layout_height="wrap_content" android:hint="@string/prompt_unidades"
android:inputType="number" android:maxLines="1"
android:singleLine="true"
android:textAppearance="?android:textAppearanceSmall"
android:enabled="true" android:focusable="true"
android:gravity="right"
android:imeActionId="@+id/cantidad"
android:imeActionLabel="@string/add"
android:imeOptions="actionUnspecified"/>
당신의 활동에서
editTextUnidades.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == R.id.cantidad || actionId == EditorInfo.IME_NULL) {
addDetalle(null);
return true;
}
return false;
}
});
답변
키 리스너에서 구현할 수 있습니다.
public class ProbabilityActivity extends Activity implements OnClickListener, View.OnKeyListener {
onCreate에서 :
max.setOnKeyListener(this);
…
@Override
public boolean onKey(View v, int keyCode, KeyEvent event){
if(keyCode == event.KEYCODE_ENTER){
//call your button method here
}
return true;
}