web-dev-qa-db-ja.com

Androidの完了したキープレスでソフトキーボードを非表示にしますか?

ソフトキーボードの完了ボタンに苦労しています。ソフトキーボードの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」キーを押すと、キーボードが非表示になります。それは変です。

27
Benny Skogberg

次のように、Android:imeOptions = "actionDone"を使用します。

<EditText
    ...
    Android:imeOptions="actionDone" />
46
alcsan
InputMethodManager inputManager = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput(0, 0);

コンテキストはあなたの活動です。

21
Doge

If-statementをif (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)に変更して、xml-attribute Android:inputType="phone"

4
Benny Skogberg

EditTextのsetOnEditorActionListener()を確認する必要があります。

テキストビューでアクションが実行されたときに呼び出される特別なリスナーを設定します。これは、Enterキーが押されたとき、またはIMEに提供されたアクションがユーザーによって選択されたときに呼び出されます。

1
Stan

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.
        }
0
Vishv Shroff

以下のコードを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" />
0
Sagar Jethva