जब एक बटन दबाया जाता है तो मैं कीबोर्ड को कैसे खारिज कर सकता हूं?
जब एक बटन दबाया जाता है तो मैं कीबोर्ड को कैसे खारिज कर सकता हूं?
जवाबों:
आप वर्चुअल कीबोर्ड को अक्षम या खारिज करना चाहते हैं?
अगर आप इसे खारिज करना चाहते हैं तो आप अपने ईवेंट के क्लिक इवेंट में कोड की निम्न पंक्तियों का उपयोग कर सकते हैं
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
getActivity()) । इसके अलावा, इसे करें और न कि यदि आप गतिविधियों को बदलते समय इसे दूर जाने की कोशिश कर रहे हैं। getCurrentFocus().getWindowToken()hideSoftInputFromWindow()onPause()onStop()
उपरोक्त समाधान सभी डिवाइस के लिए काम नहीं करता है और इसके अलावा यह एक पैरामीटर के रूप में EditText का उपयोग कर रहा है। यह मेरा समाधान है, बस इस सरल विधि को बुलाओ:
private void hideSoftKeyBoard() {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if(imm.isAcceptingText()) { // verify if the soft keyboard is open
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
isAcceptingText()इस उत्तर को दूसरों से बेहतर बनाया
यह मेरा समाधान है
public static void hideKeyboard(Activity activity) {
View v = activity.getWindow().getCurrentFocus();
if (v != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
यहाँ एक कोटलिन समाधान (धागे में विभिन्न उत्तरों को मिलाते हुए)
एक एक्सटेंशन फ़ंक्शन बनाएं (शायद एक सामान्य ViewHelpers वर्ग में)
fun Activity.dismissKeyboard() {
val inputMethodManager = getSystemService( Context.INPUT_METHOD_SERVICE ) as InputMethodManager
if( inputMethodManager.isAcceptingText )
inputMethodManager.hideSoftInputFromWindow( this.currentFocus.windowToken, /*flags:*/ 0)
}
तो बस का उपयोग कर उपभोग:
// from activity
this.dismissKeyboard()
// from fragment
activity.dismissKeyboard()
InputMethodManager के साथ पहला समाधान मेरे लिए एक विजेता की तरह काम करता है, getWindow ()। SetSoftInputMode पद्धति Android 4.0.3 HTC Amaze पर नहीं थी।
@ ईथन एलन, मुझे संपादित पाठ को अंतिम बनाने की आवश्यकता नहीं थी। हो सकता है कि आप एक EditText इनर क्लास का उपयोग कर रहे हों जिसे आपने युक्त विधि घोषित किया था? आप EditText को गतिविधि का एक वर्ग चर बना सकते हैं। या सिर्फ आंतरिक वर्ग / विधि के अंदर एक नया EditText घोषित करें और फिर से findViewById () का उपयोग करें। इसके अलावा, मुझे नहीं पता था कि मुझे यह जानने की जरूरत है कि फॉर्म में EditText का फोकस क्या था। मैं बस एक मनमाना चुन सकता था और इसका उपयोग कर सकता था। इस तरह:
EditText myEditText= (EditText) findViewById(R.id.anyEditTextInForm);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
public static void hideSoftInput(Activity activity) {
try {
if (activity == null || activity.isFinishing()) return;
Window window = activity.getWindow();
if (window == null) return;
View view = window.getCurrentFocus();
//give decorView a chance
if (view == null) view = window.getDecorView();
if (view == null) return;
InputMethodManager imm = (InputMethodManager) activity.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm == null || !imm.isActive()) return;
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
} catch (Throwable e) {
e.printStackTrace();
}
}
यह सॉल्यूशन यह सुनिश्चित करता है कि यह कीबोर्ड को छुपाता है अगर यह नहीं खुलता है। यह एक्सटेंशन का उपयोग करता है इसलिए इसका उपयोग किसी भी संदर्भ स्वामी वर्ग से किया जा सकता है।
fun Context.dismissKeyboard() {
val imm by lazy { this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager }
val windowHeightMethod = InputMethodManager::class.java.getMethod("getInputMethodWindowVisibleHeight")
val height = windowHeightMethod.invoke(imm) as Int
if (height > 0) {
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0)
}
}
दृश्य के संदर्भ का उपयोग करके, हम कोटलिन में निम्नलिखित विस्तार विधियों के साथ वांछित परिणाम प्राप्त कर सकते हैं:
/**
* Get the [InputMethodManager] using some [Context].
*/
fun Context.getInputMethodManager(): InputMethodManager {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return getSystemService(InputMethodManager::class.java)
}
return getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
}
/**
* Dismiss soft input (keyboard) from the window using a [View] context.
*/
fun View.dismissKeyboard() = context
.getInputMethodManager()
.hideSoftInputFromWindow(
windowToken
, 0
)
एक बार जब ये जगह पर हों, तो कॉल करें:
editTextFoo.dismiss()