EditText
ユーザーがEditTextをクリックしたときにキーボードに完了ボタンを表示できるように、次のプロパティを設定しています。
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
RadioButton
ユーザーがスクリーン キーボードの完了ボタンをクリックすると (入力が終了しました)、状態を変更したいと考えています。
画面キーボードからヒットしたときに完了ボタンを追跡するにはどうすればよいですか?
EditText
ユーザーがEditTextをクリックしたときにキーボードに完了ボタンを表示できるように、次のプロパティを設定しています。
editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
RadioButton
ユーザーがスクリーン キーボードの完了ボタンをクリックすると (入力が終了しました)、状態を変更したいと考えています。
画面キーボードからヒットしたときに完了ボタンを追跡するにはどうすればよいですか?
私はロバーツとchiragsの答えの組み合わせで終わった:
((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;
}
});
更新: 上記のコードは、コールバックを2回アクティブにする場合があります。代わりに、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;
}
});
この質問が古いことは知っていますが、何がうまくいったかを指摘したいと思います。
Android Developers の Web サイト(以下に示す)のサンプル コードを使用してみましたが、うまくいきませんでした。そこで、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 を設定し、Done ボタンをリッスンする方法の詳細。
最初に OnKeyListener をクラスの implements セクションに追加します。次に、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);