android - অ্যান্ড্রয়েড সফ্ট কীবোর্ড বন্ধ/লুকান




স্মার্টফোনে (20)

সংক্ষিপ্ত উত্তর

আপনার OnClick শ্রোতাদের onEditorAction এর সাথে IME_ACTION_DONE এর onEditorAction কল করুন

button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        someEditText.onEditorAction(EditorInfo.IME_ACTION_DONE)
    }
});

ড্রিল ডাউন

আমি এই পদ্ধতিটি আরও ভাল, সহজ এবং অ্যান্ড্রয়েড এর নকশা প্যাটার্ন সঙ্গে আরো সংযুক্ত। উপরে উল্লেখিত সাধারণ উদাহরণে (এবং সাধারণত বেশিরভাগ ক্ষেত্রেই) আপনার একটি সম্পাদনাটেক্সট থাকবে যা ফোকাস করেছে / এবং এটি প্রথমেই কীবোর্ডটিকে প্রথম স্থানে আনার জন্য এটি ছিল (এটি অবশ্যই এটিতে অ্যাক্সেস করতে সক্ষম অনেক সাধারণ পরিস্থিতিতে)। একইভাবে, এটি কীবোর্ডটি মুক্ত করার জন্য হওয়া উচিত, সাধারণত এটি একটি ImeAction দ্বারা করা যেতে পারে। শুধু EditText সাথে android:imeOptions="actionDone" কীভাবে দেখুন android:imeOptions="actionDone" আচরণ করে, আপনি একই উপায়ে একই আচরণ অর্জন করতে চান।

এই সম্পর্কিত উত্তর পরীক্ষা করে দেখুন

আমার একটি বিন্যাসে একটি সম্পাদনা এবং একটি Button আছে।

সম্পাদনা ক্ষেত্রে লেখা এবং বোতামে ক্লিক করার পরে, আমি ভার্চুয়াল কীবোর্ডটি লুকাতে চাই। আমি মনে করি এটি একটি সহজ কোড কোড, কিন্তু আমি এটি একটি উদাহরণ খুঁজে পেতে পারেন?


Meier এর সমাধান খুব আমার জন্য কাজ করে। আমার ক্ষেত্রে আমার অ্যাপের শীর্ষ স্তরের একটি ট্যাব হোস্ট এবং ট্যাবগুলি স্যুইচ করার সময় আমি কীওয়ার্ডটি লুকাতে চাই - ট্যাব হোস্ট ভিউ থেকে উইন্ডো টোকেনটি পেতে পারি।

tabHost.setOnTabChangedListener(new OnTabChangeListener() {
    public void onTabChanged(String tabId) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(tabHost.getApplicationWindowToken(), 0);
    }
}

আমি একটি হেক্স নম্বর ইনপুট করার জন্য একটি কাস্টম কীবোর্ড ব্যবহার করছি তাই আমি আইএমএম কীবোর্ড দেখাতে পারি না ...

V3.2.4_r1 সেট setSoftInputShownOnFocus(boolean show) আবহাওয়া নিয়ন্ত্রণ করতে বা কোনও পাঠ্য setSoftInputShownOnFocus(boolean show) ফোকাস পায় যখন কীবোর্ড প্রদর্শন না করার জন্য যুক্ত করা হয়েছিল, তবে এটি এখনও লুকানো তাই প্রতিফলন ব্যবহার করতে হবে:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    try {
        Method method = TextView.class.getMethod("setSoftInputShownOnFocus", boolean.class);
        method.invoke(mEditText, false);
    } catch (Exception e) {
        // Fallback to the second method
    }
}

পুরোনো সংস্করণগুলির জন্য, আমার OnGlobalLayoutListener সহায়তায়, আমার রুট ভিউ থেকে ViewTreeObserver সহায়তায় এবং তারপর কীবোর্ডটি কীভাবে দেখানো হচ্ছে তা পরীক্ষা করে:

@Override
public void onGlobalLayout() {
    Configuration config = getResources().getConfiguration();

    // Dont allow the default keyboard to show up
    if (config.keyboardHidden != Configuration.KEYBOARDHIDDEN_YES) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(mRootView.getWindowToken(), 0);
    }
}

এই শেষ সমাধান একটি বিভক্ত দ্বিতীয় জন্য কীবোর্ড এবং নির্বাচন হ্যান্ডলগুলি সঙ্গে messes দেখাতে পারে।

যখন কীবোর্ড পূর্ণ পর্দায় প্রবেশ করে, গ্লোবাল লায়আউট বলা হয় না। এটিকে এড়ানোর জন্য, TextView#setImeOptions(int) অথবা TextView#setImeOptions(int) এক্সএমএল ঘোষণাটি ব্যবহার করুন:

android:imeOptions="actionNone|actionUnspecified|flagNoFullscreen|flagNoExtractUi"

আপডেট: কি ডায়ালগগুলি কখনই কীবোর্ড দেখাবে না এবং সমস্ত সংস্করণগুলিতে কাজ করে তা পাওয়া যায়:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
        WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

আমি কীবোর্ড লুকানোর জন্য আরও একটি সমাধান পেয়েছিলাম:

InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);

এখানে HIDE_IMPLICIT_ONLY পাস HIDE_IMPLICIT_ONLY অবস্থানের showFlag এবং 0hiddenFlag । এটা জোরালোভাবে নরম কীবোর্ড বন্ধ করা হবে।


এই কাজ করা উচিত:

public class KeyBoard {

    public static void show(Activity activity){
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY); // show
    }

    public static void hide(Activity activity){
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0); // hide
    }

    public static void toggle(Activity activity){
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
        if (imm.isActive()){
            hide(activity); 
        } else {
            show(activity); 
        }
    }
}

KeyBoard.toggle(activity);

এই পাগলামিটি স্পষ্ট করার জন্য, আমি নরম কীবোর্ডের Google এর নিষ্ঠুর হাস্যকর চিকিত্সার জন্য সমস্ত Android ব্যবহারকারীদের পক্ষে ক্ষমাপ্রার্থী শুরু করতে চাই। একই সাধারণ প্রশ্নটির জন্য অনেকগুলি ভিন্ন উত্তর রয়েছে কারণ এটির API এন্ড্রয়েডের অন্যান্যদের মতই ভয়ানকভাবে ডিজাইন করা হয়েছে। আমি এটা বিব্রত করার কোন শালীন উপায় মনে করতে পারেন।

আমি কীবোর্ড লুকাতে চাই। আমি নিম্নলিখিত বিবৃতি সহ Android প্রদান করতে আশা করি: Keyboard.hide() । শেষ। আপনাকে অনেক ধন্যবাদ. কিন্তু অ্যান্ড্রয়েড একটি সমস্যা আছে। কীবোর্ডটি লুকাতে আপনাকে অবশ্যই ইনপুট InputMethodManager ব্যবহার করতে হবে। ঠিক আছে, জরিমানা, এটি কীবোর্ডের Android এর API। কিন্ত! আপনি IMM অ্যাক্সেস পেতে একটি Context থাকতে হবে। এখন আমরা একটি সমস্যা আছে। আমি একটি স্ট্যাটিক বা ইউটিলিটি ক্লাস থেকে কীবোর্ডটি লুকাতে চাই যা কোন Context জন্য ব্যবহার বা প্রয়োজন নেই। অথবা FAR এর চেয়ে খারাপ, IMM এটিকে কীভাবে আপনি কী কীবোর্ডটি লুকিয়ে রাখতে চান (বা আরও খারাপ, কোনও Window ) তা নির্দিষ্ট করতে চান।

এই কি তাই চ্যালেঞ্জিং কীবোর্ড গোপন করে তোলে। প্রিয় গুগল: যখন আমি কেকের জন্য রেসিপি খুঁজছি, পৃথিবীতে কোন RecipeProvider নেই RecipeProvider আমাকে রেসিপি প্রদান করতে অস্বীকার করবে যদি না আমি প্রথমে WHO কে কেক খেতে হবে এবং কোথায় খাওয়া হবে তা উত্তর দিবে না !!

এই দু: খিত গল্পটি কুৎসিত সত্যের সাথে শেষ হয়: Android কীবোর্ডটি লুকাতে, আপনাকে সনাক্তকরণের 2 ফর্ম সরবরাহ করতে হবে: একটি Context এবং একটি View বা একটি Window

আমি একটি স্ট্যাটিক ইউটিলিটি পদ্ধতি তৈরি করেছি যা খুব কঠিনভাবে কাজ করতে পারে, যদি আপনি এটি একটি Activity থেকে কল করেন।

public static void hideKeyboard(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    //Find the currently focused view, so we can grab the correct window token from it.
    View view = activity.getCurrentFocus();
    //If no view currently has focus, create a new one, just so we can grab a window token from it
    if (view == null) {
        view = new View(activity);
    }
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

সচেতন থাকবেন যে এই ইউটিলিটি পদ্ধতিটি কেবল তখনই কাজ করে যখন Activity থেকে বলা হয়! উপরের পদ্ধতিটি সঠিক উইন্ডো টোকেন আনতে লক্ষ্য Activity getCurrentFocus কল করে।

কিন্তু ধরুন আপনি একটি DialogFragment হোস্ট করা একটি DialogFragment থেকে কীবোর্ড লুকাতে চান? আপনি উপরের পদ্ধতিটি ব্যবহার করতে পারবেন না:

hideKeyboard(getActivity()); //won't work

এটি কাজ করবে না কারণ আপনি Fragment এর হোস্ট Activity একটি রেফারেন্স পাশ করতে Fragment , যা Fragment দেখানো অবস্থায় কোনও ফোকাস নিয়ন্ত্রণ থাকবে না! কি দারুন! সুতরাং, টুকরা থেকে কীবোর্ড গোপন করার জন্য, আমি নিম্ন স্তরের, আরো সাধারণ, এবং uglier অবলম্বন:

public static void hideKeyboardFrom(Context context, View view) {
    InputMethodManager imm = (InputMethodManager) context.getSystemService(Activity.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

নীচের কিছু অতিরিক্ত তথ্য এই সমাধানটি অনুসরণে নষ্ট হয়ে যাওয়া সময় থেকে সংগৃহীত:

উইন্ডো সম্পর্কে SoftInputMode

সচেতন হতে এখনও মতবিরোধ আরেকটি বিন্দু আছে। ডিফল্টরূপে, অ্যানড্রইড স্বয়ংক্রিয়ভাবে আপনার সম্পাদনাতে প্রথম সম্পাদনাটিক্স বা ফোকাসেবল নিয়ন্ত্রণে প্রাথমিক ফোকাস বরাদ্দ করবে। এটি স্বাভাবিকভাবেই ইনপুট মডিউল (সাধারণত নরম কীবোর্ড) ফোকাস ইভেন্টটিকে নিজেই প্রদর্শন করে সাড়া দেবে। windowSoftInputMode AndroidManifest.xml windowSoftInputMode অ্যাট্রিবিউট, যখন স্টেট এ সেট করা থাকে stateAlwaysHidden , কীবোর্ডটি স্বয়ংক্রিয়ভাবে নির্ধারিত প্রাথমিক ফোকাসটিকে উপেক্ষা করতে নির্দেশ দেয়।

<activity
    android:name=".MyActivity"
    android:windowSoftInputMode="stateAlwaysHidden"/>

প্রায় অবিশ্বাস্যভাবে, যখন আপনি নিয়ন্ত্রণটি স্পর্শ করেন তখন কীবোর্ডটি খোলার থেকে বাধা দেওয়ার জন্য এটি কিছু না বলে মনে হয় (যদি না focusable="false" এবং / অথবা focusableInTouchMode="false" নিয়ন্ত্রণে দেওয়া হয়)। দৃশ্যত, উইন্ডোজ সফট ইনপুটমোড সেটিং শুধুমাত্র স্বয়ংক্রিয় ফোকাস ইভেন্টগুলিতে প্রযোজ্য, স্পর্শ ইভেন্টগুলি থেকে ট্রিগার ইভেন্টগুলিকে ফোকাস করতে নয়।

অতএব, stateAlwaysHidden সত্যিই খুব খারাপ নামকরণ করা হয়। এটি সম্ভবত ignoreInitialFocus বলা উচিত।

আশাকরি এটা সাহায্য করবে.

আপডেট: উইন্ডো টোকেন পেতে আরো উপায়

যদি কোনও দৃষ্টিভঙ্গি না থাকে (যেমন আপনি যদি কেবলমাত্র টুকরা পরিবর্তন করেন তবে ঘটতে পারে), অন্যান্য মতামত রয়েছে যা একটি কার্যকর উইন্ডো টোকেন সরবরাহ করবে।

উপরের কোডের জন্য এই বিকল্পগুলি if (view == null) view = new View(activity); এই আপনার কার্যকলাপ স্পষ্টভাবে উল্লেখ করা হয় না।

একটি টুকরা ক্লাস ভিতরে:

view = getView().getRootView().getWindowToken();

একটি পরামিতি হিসাবে একটি টুকরা fragment দেওয়া:

view = fragment.getView().getRootView().getWindowToken();

আপনার বিষয়বস্তু শরীর থেকে শুরু:

view = findViewById(android.R.id.content).getRootView().getWindowToken();

আপডেট 2: ব্যাকগ্রাউন্ড থেকে অ্যাপ্লিকেশনটি খুললে আবার কীবোর্ড দেখানো এড়ানোর জন্য ফোকাস সাফ করুন

পদ্ধতির শেষে এই লাইন যোগ করুন:

view.clearFocus();


নরম-কীবোর্ড লুকানোর জন্যও দরকারী:

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

ব্যবহারকারীটি প্রকৃতপক্ষে editText ভিউ স্পর্শ না হওয়া পর্যন্ত এটি সফ্ট-কীবোর্ডটি দমন করার জন্য ব্যবহার করা যেতে পারে।


যদি এখানে অন্য সকল উত্তর আপনার জন্য কাজ না করে তবে আপনার নিজের কীবোর্ডটি নিয়ন্ত্রণ করার আরেকটি উপায় রয়েছে।

EditText সাথে একটি ফাংশন তৈরি করুন সম্পাদনাটির কিছু বৈশিষ্ট্য পরিচালনা করবে:

public void setEditTextFocus(boolean isFocused) {
    searchEditText.setCursorVisible(isFocused);
    searchEditText.setFocusable(isFocused);
    searchEditText.setFocusableInTouchMode(isFocused);

    if (isFocused) {
        searchEditText.requestFocus();
    }
}

তারপরে, নিশ্চিত করুন যে আপনি EditText এর ফোকাসটি কীবোর্ডটি খুলুন / বন্ধ করুন:

searchEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (v == searchEditText) {
            if (hasFocus) {
                // Open keyboard
                ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(searchEditText, InputMethodManager.SHOW_FORCED);
            } else {
                // Close keyboard
                ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
            }
        }
    }
});

এখন, যখনই আপনি কীবোর্ডটি খুলতে চান ম্যানুয়ালি কল করুন:

setEditTextFocus(true);

এবং বন্ধ করার জন্য কল:

setEditTextFocus(false);

আপডেট: আমি জানি না কেন এই সমাধানটি আর কাজ করে না (আমি কেবল অ্যান্ড্রয়েড 23 এ পরীক্ষিত)। পরিবর্তে সৌরভ প্যারিক এর সমাধান ব্যবহার করুন। এটা এখানে:

InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
//Hide:
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
//Show
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

পুরানো উত্তর:

//Show soft-keyboard:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
//hide keyboard :
 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

আপনি যদি ইউনিট বা কার্যক্ষম পরীক্ষার সময় নরম কীবোর্ড বন্ধ করতে চান, তবে আপনি আপনার পরীক্ষার "ব্যাক বোতাম" ক্লিক করে এটি করতে পারেন:

// Close the soft keyboard from a Test
getInstrumentation().sendKeyDownUpSync(KeyEvent.KEYCODE_BACK);

আমি কোটগুলিতে "ব্যাক বোতাম" রাখি, যেহেতু উপরে দেওয়া onBackPressed()কার্যকলাপের জন্য ট্রিগারটি ট্রিগার হয় না । এটা শুধু কীবোর্ড বন্ধ করে।

পিছনে যাওয়ার আগে একটু সময় বিরতিতে ভুলবেন না, কারণ ব্যাক বোতামটি বন্ধ করার জন্য এটি কিছুটা সময় নেয়, তাই দৃশ্যগুলিতে পরবর্তী ক্লিকগুলি, ইত্যাদি, সংক্ষিপ্ত বিরতির পরে নিবন্ধিত হবে না (1 সেকেন্ড দীর্ঘ যথেষ্ট ime )।


এই সব বিদ্বেষপূর্ণ কীবোর্ড আচরণের জন্য আমার জন্য কাজ

private boolean isKeyboardVisible() {
    Rect r = new Rect();
    //r will be populated with the coordinates of your view that area still visible.
    mRootView.getWindowVisibleDisplayFrame(r);

    int heightDiff = mRootView.getRootView().getHeight() - (r.bottom - r.top);
    return heightDiff > 100; // if more than 100 pixels, its probably a keyboard...
}

protected void showKeyboard() {
    if (isKeyboardVisible())
        return;
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (getCurrentFocus() == null) {
        inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    } else {
        View view = getCurrentFocus();
        inputMethodManager.showSoftInput(view, InputMethodManager.SHOW_FORCED);
    }
}

protected void hideKeyboard() {
    if (!isKeyboardVisible())
        return;
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    View view = getCurrentFocus();
    if (view == null) {
        if (inputMethodManager.isAcceptingText())
            inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_NOT_ALWAYS, 0);
    } else {
        if (view instanceof EditText)
            ((EditText) view).setText(((EditText) view).getText().toString()); // reset edit text bug on some keyboards bug
        inputMethodManager.hideSoftInputFromInputMethod(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

এটা ব্যবহার কর

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

শুধু আপনার ক্রিয়াকলাপ এই অপ্টিমাইজড কোড ব্যবহার করুন:

if (this.getCurrentFocus() != null) {
    InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}

সৌরভ প্যারিকের এখন পর্যন্ত সেরা উত্তর আছে।

পাশাপাশি সঠিক পতাকা ব্যবহার করতে পারে, যদিও।

/* hide keyboard */
((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
    .toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

/* show keyboard */
((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
    .toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);

বাস্তব ব্যবহার উদাহরণ

/* click button */
public void onClick(View view) {      
  /* hide keyboard */
  ((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
      .toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

  /* start loader to check parameters ... */
}

/* loader finished */
public void onLoadFinished(Loader<Object> loader, Object data) {
    /* parameters not valid ... */

    /* show keyboard */
    ((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
        .toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);

    /* parameters valid ... */
}

আমার ক্ষেত্রে, আমি অ্যাকশনবারে একটি অনুসন্ধান ভিউ ব্যবহার করছিলাম। একটি ব্যবহারকারী একটি অনুসন্ধান সঞ্চালনের পরে, কীবোর্ড আবার খোলা পপ হবে।

InputMethodManager ব্যবহার করে কীবোর্ডটি বন্ধ করে নি। আমি ফোকাস মুছে ফেলতে এবং অনুসন্ধান দৃশ্যে ফোকাসযোগ্য সেট মিথ্যা সেট ছিল:

mSearchView.clearFocus();
mSearchView.setFocusable(false);

আমি কেস আছে, যেখানে আমার EditTextমধ্যে একটি অবস্থিত হতে পারে AlertDialog, তাই কীবোর্ড খারিজ বন্ধ করা উচিত। নিম্নোক্ত কোডটি কোথাও কাজ করছে বলে মনে হচ্ছে:

public static void hideKeyboard( Activity activity ) {
    InputMethodManager imm = (InputMethodManager)activity.getSystemService( Context.INPUT_METHOD_SERVICE );
    View f = activity.getCurrentFocus();
    if( null != f && null != f.getWindowToken() && EditText.class.isAssignableFrom( f.getClass() ) )
        imm.hideSoftInputFromWindow( f.getWindowToken(), 0 );
    else 
        activity.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN );
}

এই SO উত্তরটির জন্য ধন্যবাদ , আমি নিম্নলিখিতটি উদ্ভাবন করেছি যা, আমার ক্ষেত্রে, একটি ViewPager এর টুকরাগুলির মাধ্যমে স্ক্রোল করার সময় চমত্কারভাবে কাজ করে ...

private void hideKeyboard() {   
    // Check if no view has focus:
    View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

private void showKeyboard() {   
    // Check if no view has focus:
    View view = this.getCurrentFocus();
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        inputManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
    }
}

কিছু ক্ষেত্রে এই পদ্ধতি অন্যান্য সব ছাড়া কাজ করতে পারে। এই আমার দিন সংরক্ষণ :)

public static void hideSoftKeyboard(Activity activity) {
    if (activity != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (activity.getCurrentFocus() != null && inputManager != null) {
            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
            inputManager.hideSoftInputFromInputMethod(activity.getCurrentFocus().getWindowToken(), 0);
        }
    }
}

public static void hideSoftKeyboard(View view) {
    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputManager != null) {
            inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    }
}

সহজ এবং সহজ পদ্ধতি ব্যবহার করার জন্য, শুধু HideKeyboard থেকে কল করুন (YourActivity.this); কীবোর্ড লুকাতে

/**
 * This method is used to hide keyboard
 * @param activity
 */
public static void hideKeyboardFrom(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}

protected void hideSoftKeyboard(EditText input) {
    input.setInputType(0);
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(input.getWindowToken(), 0);    
}




soft-keyboard