29

ソフトキーボードの完了ボタンに苦労しています。ソフト キーボードが表示されない キーを押してキーボードを非表示にします。別のボタンから、それは完全に動作します

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」を押すと、キーボードが非表示になります。それは変です。

4

7 に答える 7

59

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

<EditText
    ...
    android:imeOptions="actionDone" />
于 2015-11-30T13:36:38.653 に答える
26
InputMethodManager inputManager = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.toggleSoftInput(0, 0);

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

于 2010-08-05T13:52:31.623 に答える
4

if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)xml-attribute で動作するように if-statement を変更しましたandroid:inputType="phone"

于 2010-08-06T08:41:49.307 に答える
1

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

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

于 2013-02-04T16:25:12.687 に答える
0

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.
        }
于 2019-12-19T05:55:15.557 に答える