私のアプリでは、ユーザーが数値を入力するフィールドがあります。数字のみを受け入れるようにフィールドを設定しています。ユーザーがフィールドをクリックすると、キーボードが表示されます。キーボード(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(クロスプラットフォーム)でこれを試してください
edittext.EditorAction += (object sender, TextView.EditorActionEventArgs e) {
if (e.ActionId.Equals (global::Android.Views.InputMethods.ImeAction.Done)) {
//TODO Something
}
};
LoginActivityを作成するときに、Android Studioから次のコードをコピーしました。 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;
}
ボタンクリックなどのイベントを通じてやりたい仕事をするためにキーボードのエンターボタンをキャッチしたい場合は、そのテキストビュー用に以下の簡単なコードを書くことができます
Edittext ed= (EditText) findViewById(R.id.edit_text);
ed.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
// Do you job here which you want to done through event
}
return false;
}
});
レイアウトでこのクラスを使用します。
public class ActionEditText extends EditText
{
public ActionEditText(Context context)
{
super(context);
}
public ActionEditText(Context context, AttributeSet attrs)
{
super(context, attrs);
}
public ActionEditText(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
}
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs)
{
InputConnection conn = super.onCreateInputConnection(outAttrs);
outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION;
return conn;
}
}
Xmlで:
<com.test.custom.ActionEditText
Android:id="@+id/postED"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:background="@Android:color/transparent"
Android:gravity="top|left"
Android:hint="@string/msg_type_message_here"
Android:imeOptions="actionSend"
Android:inputType="textMultiLine"
Android:maxLines="5"
Android:padding="5dip"
Android:scrollbarAlwaysDrawVerticalTrack="true"
Android:textColor="@color/white"
Android:textSize="20sp" />
max.setOnKeyListener(new OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event){
if(keyCode == event.KEYCODE_ENTER){
//do what you want
}
}
});
最後のEdittext .setOnEditorActionListenerは、このメソッドを自動ヒットAPIで呼び出します
et_passwordのLoginActivityで呼び出していた
et_Pass.setOnEditorActionListener(new TextView.OnEditorActionListener() {
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");
Log.i(Check Internet," and Connect To Server");
}
return false;
}
});
Working Fine