একটি বোতাম টিপলে কীভাবে কীবোর্ডটি খারিজ করব?
একটি বোতাম টিপলে কীভাবে কীবোর্ডটি খারিজ করব?
উত্তর:
আপনি ভার্চুয়াল কীবোর্ড অক্ষম বা বরখাস্ত করতে চান?
আপনি যদি এটিকে খারিজ করতে চান তবে আপনার ইভেন্টের ক্লিকের বোতামে নিম্নলিখিত কোডের লাইনগুলি ব্যবহার করতে পারেন
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
getActivity()) getCurrentFocus().getWindowToken()ব্যবহার করতে পারেন hideSoftInputFromWindow()। এছাড়াও, ক্রিয়াকলাপ পরিবর্তন করার সময় আপনি এটি দূরে সরিয়ে নেওয়ার চেষ্টা করছেন onPause()না তবে onStop()এটি করুন।
উপরের সমাধানটি সমস্ত ডিভাইসের জন্য কাজ করে না এবং এটি সম্পাদনা পাঠ্যকে পরামিতি হিসাবে ব্যবহার করে Edit এটি আমার সমাধান, কেবল এই সাধারণ পদ্ধতিটি কল করুন:
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);
}
}
এখানে একটি কোটলিন সমাধান (বিভিন্ন উত্তরকে থ্রেডে মিশ্রিত করা হচ্ছে)
একটি এক্সটেনশন ফাংশন তৈরি করুন (সম্ভবত একটি সাধারণ ভিউহেল্পার্স শ্রেণিতে)
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()
ইনপুটমেথডম্যানেজারের সাথে প্রথম সমাধানটি আমার জন্য চ্যাম্পের মতো কাজ করেছে, getWindow ()। সেটসফট ইনপুটমোড পদ্ধতিটি অ্যান্ড্রয়েড .3.০.৩ এইচটিসি আমাজে হয়নি।
@ ইথান অ্যালেন, আমার সম্পাদনা পাঠ্যটি চূড়ান্ত করার দরকার নেই। সম্ভবত আপনি একটি সম্পাদনা পাঠ্য অভ্যন্তরীণ শ্রেণীর ব্যবহার করছেন যা আপনি ধারণের পদ্ধতিটি ঘোষণা করেছেন? আপনি সম্পাদনা পাঠকে ক্রিয়াকলাপের একটি শ্রেণি পরিবর্তনশীল করতে পারেন। অথবা কেবলমাত্র অভ্যন্তর শ্রেণি / পদ্ধতির অভ্যন্তরে একটি নতুন সম্পাদনা পাঠ্য ঘোষণা করুন এবং আবার FindViewById () ব্যবহার করুন। এছাড়াও, আমি খুঁজে পাইনি যে ফর্মের কোন সম্পাদনা পাঠের ফোকাস ছিল তা আমার জানা দরকার। আমি কেবল যথেচ্ছভাবে একটি বাছাই করতে এবং এটি ব্যবহার করতে পারি। তাই ভালো:
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()