ソフトキーボードの完了ボタンに苦労しています。ソフトキーボードのDoneキーを押してキーボードを非表示にすることができません。別のボタンから、それは完全に動作します
imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);
しかし、onKeyListenerが希望どおりに機能しません。 editTextを押すと、ソフトキーボードが表示され、その内容が文字から消去されます。
聞いてくれてありがとう!
Main.xml:
<EditText
Android:id="@+id/answer"
Android:layout_gravity="center_horizontal" Android:textSize="36px"
Android:inputType="phone"
Android:minWidth="60dp" Android:maxWidth="60dp"
/>
Javaファイル:
private EditText editText;
//...
editText = (EditText)findViewById(R.id.answer);
editText.setOnClickListener(onKeyboard);
editText.setOnKeyListener(onSoftKeyboardDonePress);
//...
// method not working:
private View.OnKeyListener onSoftKeyboardDonePress=new View.OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getKeyCode() == KeyEvent.FLAG_EDITOR_ACTION)
{
// code to hide the soft keyboard
imm = (InputMethodManager) getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);
}
return false;
}
};
private View.OnClickListener onKeyboard=new View.OnClickListener()
{
public void onClick(View v)
{
editText.setText("");
}
};
ボタンを使用した作業方法(同じJavaファイル内):
private View.OnClickListener onDone=new View.OnClickListener()
{
public void onClick(View v)
{
//....
// code to hide the soft keyboard
imm = (InputMethodManager) getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0);
}
};
編集:「9」キーを押すと、キーボードが非表示になります。それは変です。
次のように、Android:imeOptions = "actionDone"を使用します。
<EditText
...
Android:imeOptions="actionDone" />
InputMethodManager inputManager = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput(0, 0);
コンテキストはあなたの活動です。
If-statementをif (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
に変更して、xml-attribute Android:inputType="phone"
。
EditTextのsetOnEditorActionListener()を確認する必要があります。
テキストビューでアクションが実行されたときに呼び出される特別なリスナーを設定します。これは、Enterキーが押されたとき、またはIMEに提供されたアクションがユーザーによって選択されたときに呼び出されます。
SoftKeyboardは以下の方法で非表示にできます
Javaクラスでは、次のコードを記述して、ユーザーが完了または入力したときにキーボードを非表示にすることができます
etBid.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH ||
actionId == EditorInfo.IME_ACTION_DONE ||
event != null &&
event.getAction() == KeyEvent.ACTION_DOWN &&
event.getKeyCode() == KeyEvent.KEYCODE_ENTER)
{
if (event == null || !event.isShiftPressed())
{
// the user is done typing.
InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
return true; // consume.
}
}
return false; // pass on to other listeners.
}
以下のコードをAndroid:imeOptions="actionDone"
で使用してください。
<EditText
Android:id="@+id/et_switch_name"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:hint="Name"
Android:imeOptions="actionDone"
Android:inputType="textPersonName" />