6

EditText にテキストを入力した後、キーボードを非表示にする最良の方法を知りたいです。

1) setonfocuschangelistener : このリスナーは、完了ボタンが押されたとき、またはフォーカスが 1 つの EditText から別の EditText に変更されたときにのみ起動されますか? この方法を使用すると、キーボードを非表示にできませんでした。

2) setOnTouchListener : これを使用すると、キーボードを非表示にできましたが、これに問題があるとは思えません。この場合、タッチ リスナーをルート LinearLayout に追加します。私が使用した次のコード:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login);

    txtUserName = (EditText)findViewById(R.id.txtUserName);
    btnLogin = (Button)findViewById(R.id.btnLogin);
    layoutView = (LinearLayout)findViewById(R.id.li);

    layoutView.setOnTouchListener(new OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.hideSoftInputFromWindow(txtUserName
                    .getWindowToken(), 0);
            return true;
        }
    });
}

メインの LinearLayout 内では、他の 2 つの LinearLayout を使用しています。上記のコードで直面した問題は、押したときにキーボードが非表示にならないことです。私の疑問は、ルートレイアウトのみでタッチリスナーを追加していて、他の内部レイアウトまたは他のコントロール(TextView)でタッチリスナーを提供していないことです。他のコントロールまたは TextView の周りのいくつかのポイント (つまり、内部レイアウト) に触れると、キーボードが非表示になりません。

つまり、ルート レイアウト内のすべてのレイアウトまたはコントロールに touchListener を追加する必要がありますか? この状況をより良い方法で処理するにはどうすればよいでしょうか?

4

5 に答える 5

15

このコードを使用できます

InputMethodManager imm = 
    (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEditView.getWindowToken(), 0);
于 2012-05-11T11:59:31.533 に答える
9

この質問に対する私の答え:

このメソッドを追加します。

public static void hideSoftKeyboard(Activity activity) {
  InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
  inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}

画面にタッチしたときにキーボードを非表示にする場合は、次の方法で実行できます。

@Override
public boolean onTouchEvent(MotionEvent event) {
 hideSoftKeyboard(LoginActivity.this);
 return false;
}

これがあなたを助けることを願っています。

于 2013-04-13T09:05:28.057 に答える
5

これを試して :

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

ユーザーが実際に edittext ビューに触れるまでキーボードを抑制するために使用できます。

また

 inputManager.hideSoftInputFromWindow(editView.getWindowToken(), 0);
于 2012-05-11T11:18:36.940 に答える
2

nullの単純なチェックまたはtry-catchNullPointerExceptionは、ビューがフォーカスされていない場合を回避します。

public void hideKeyboard(Activity activity) {
    InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (activity.getCurrentFocus() != null) {
            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus()
                    .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
}
于 2014-01-08T21:07:20.350 に答える
-1

dispatchDoneKeyアクティビティでキーボードを非表示にする最良の方法。表示状態の場合、キーボードは非表示になります。

public void dispatchDoneKey() {
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK));
}
于 2013-09-05T12:51:23.653 に答える