অ্যান্ড্রয়েড কীবোর্ড খারিজ করুন


147

একটি বোতাম টিপলে কীভাবে কীবোর্ডটি খারিজ করব?


একটি সম্পাদনা পাঠ্যকে আকর্ষণীয় করুন = মিথ্যা কাজটি করে। আপনি কি এটি পুরোপুরি অক্ষম করতে চান?
st0le

উত্তর:


325

আপনি ভার্চুয়াল কীবোর্ড অক্ষম বা বরখাস্ত করতে চান?

আপনি যদি এটিকে খারিজ করতে চান তবে আপনার ইভেন্টের ক্লিকের বোতামে নিম্নলিখিত কোডের লাইনগুলি ব্যবহার করতে পারেন

InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

1
এটির সাথে দুটি সমস্যা .... একটি হ'ল আমার এডিটটেক্সট ফাইনাল হওয়া দরকার। দ্বিতীয়টি হ'ল আমাকে জানতে হবে কোন এডিটেক্সট বক্সের ফোকাস রয়েছে। এর কোন সমাধান?
ইথান অ্যালেন

78
অন্য যে কেউ এখানে হোঁচট খায়, আপনি প্রথমে তর্ক করার জন্য ক্রিয়াকলাপটির (আপনি যে কার্যকলাপে রয়েছেন বা টুকরো টুকরো getActivity()) getCurrentFocus().getWindowToken()ব্যবহার করতে পারেন hideSoftInputFromWindow()। এছাড়াও, ক্রিয়াকলাপ পরিবর্তন করার সময় আপনি এটি দূরে সরিয়ে নেওয়ার চেষ্টা করছেন onPause()না তবে onStop()এটি করুন।
ড্রার ক্লারিস

2
এই উত্তরটি এখানে মন্তব্যের সাথে মিলিত হয়ে আমার সমস্যার সম্পূর্ণ সমাধান করেছে!
আভেছিনী

9
কিবোর্ড খারিজ করার জন্য কী কুৎসিত, কুরুচিপূর্ণ পদ্ধতি। আমি আশা করি ভবিষ্যতে এই জাতীয় কোনও সহজ উপায় করার জন্য আরও পরিষ্কার উপায় আছে।
সাববি

73

উপরের সমাধানটি সমস্ত ডিভাইসের জন্য কাজ করে না এবং এটি সম্পাদনা পাঠ্যকে পরামিতি হিসাবে ব্যবহার করে 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);
    }
}

3
isAcceptingText()এই উত্তরটি অন্যের চেয়ে আরও ভাল করেছে
ব্যবহারকারী1506104

ভাল সমাধান ... বিরল ক্ষেত্রে হ'ল গ্রহণযোগ্য পাঠ () কীবোর্ডটি স্ক্রিনে থাকা অবস্থায় মিথ্যা ফিরতে পারে, উদাহরণস্বরূপ সম্পাদনা পাঠ্য পাঠ্য থেকে নির্বাচন করা যেতে পারে তবে একই উইন্ডোতে সম্পাদিত নয় এমন পাঠ্যটিতে ক্লিক করুন।
জর্জি

29

এটা আমার সমাধান

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);
    }
}

এটি হ'ল যদি আপনি সেই দৃশ্যটি জানেন যা কীবোর্ডটি দেখায়।
আরপিএম

16

আপনি বোতাম ক্লিক ইভেন্টে এই কোডটি ব্যবহার করতে পারেন

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

13

এখানে একটি কোটলিন সমাধান (বিভিন্ন উত্তরকে থ্রেডে মিশ্রিত করা হচ্ছে)

একটি এক্সটেনশন ফাংশন তৈরি করুন (সম্ভবত একটি সাধারণ ভিউহেল্পার্স শ্রেণিতে)

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()

5

ইনপুটমেথডম্যানেজারের সাথে প্রথম সমাধানটি আমার জন্য চ্যাম্পের মতো কাজ করেছে, getWindow ()। সেটসফট ইনপুটমোড পদ্ধতিটি অ্যান্ড্রয়েড .3.০.৩ এইচটিসি আমাজে হয়নি।

@ ইথান অ্যালেন, আমার সম্পাদনা পাঠ্যটি চূড়ান্ত করার দরকার নেই। সম্ভবত আপনি একটি সম্পাদনা পাঠ্য অভ্যন্তরীণ শ্রেণীর ব্যবহার করছেন যা আপনি ধারণের পদ্ধতিটি ঘোষণা করেছেন? আপনি সম্পাদনা পাঠকে ক্রিয়াকলাপের একটি শ্রেণি পরিবর্তনশীল করতে পারেন। অথবা কেবলমাত্র অভ্যন্তর শ্রেণি / পদ্ধতির অভ্যন্তরে একটি নতুন সম্পাদনা পাঠ্য ঘোষণা করুন এবং আবার FindViewById () ব্যবহার করুন। এছাড়াও, আমি খুঁজে পাইনি যে ফর্মের কোন সম্পাদনা পাঠের ফোকাস ছিল তা আমার জানা দরকার। আমি কেবল যথেচ্ছভাবে একটি বাছাই করতে এবং এটি ব্যবহার করতে পারি। তাই ভালো:

    EditText myEditText= (EditText) findViewById(R.id.anyEditTextInForm);  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

3
স্ট্যাক ওভারফ্লোতে স্বাগতম! এটি আসলে একটি মন্তব্য, উত্তর নয়। আরও কিছুটা প্রতিনিধির সাথে আপনি মন্তব্য পোস্ট করতে সক্ষম হবেন
জ্যাক 18

4
    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();
    }
}

1

এই সমাধানটি নিশ্চিত করে নিন যে এটি কীবোর্ডটি লুকিয়ে রাখলে এটিও কিছু না করে। এটি এক্সটেনশন ব্যবহার করে যাতে এটি কোনও প্রসঙ্গের মালিক শ্রেণি থেকে ব্যবহার করা যায়।


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)
    }
}


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()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.