বোতাম টিপে ভার্চুয়াল কীবোর্ডটি বন্ধ করুন


133

আমার Activityসাথে একটি EditText, বোতাম এবং এ আছে ListView। উদ্দেশ্যটি হল অনুসন্ধানের স্ক্রিনটি টাইপ করা EditText, বোতামটি টিপুন এবং অনুসন্ধান ফলাফলগুলি এই তালিকাটি জনপ্রিয় করুন।

এটি সমস্ত নিখুঁতভাবে কাজ করছে তবে ভার্চুয়াল কীবোর্ডটি অদ্ভুত আচরণ করছে।

আমি যদি ক্লিক করি তবে আমি EditTextভার্চুয়াল কীবোর্ড পাই। আমি যদি ভার্চুয়াল কীবোর্ডের "সম্পন্ন" বোতামটি ক্লিক করি তবে তা চলে যায়। তবে, যদি আমি ভার্চুয়াল কীবোর্ডে "সম্পন্ন" ক্লিক করার আগে আমার অনুসন্ধান বোতামটি ক্লিক করি, তবে ভার্চুয়াল কীবোর্ড স্থির থাকে এবং আমি এ থেকে মুক্তি পেতে পারি না। "সম্পন্ন" বোতামটি ক্লিক করলে কীবোর্ডটি বন্ধ হয় না। এটি "হয়ে গেছে" বোতামটি "সম্পন্ন" থেকে একটি তীরে পরিবর্তন করে এবং দৃশ্যমান থেকে যায়।

আপনার সাহায্যের জন্য ধন্যবাদ

উত্তর:


304
InputMethodManager inputManager = (InputMethodManager)
                                  getSystemService(Context.INPUT_METHOD_SERVICE); 

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                     InputMethodManager.HIDE_NOT_ALWAYS);

আমি onClick(View v)ঘটনার পরে এই অধিকার রাখলাম ।

আপনার আমদানি করা দরকার android.view.inputmethod.InputMethodManager;

আপনি বোতামটি ক্লিক করলে কীবোর্ডটি লুকিয়ে থাকে।


55
দ্রষ্টব্য: (আপনি যদি এই পদ্ধতিটি যেখানে ফোকাস নাও করতে পারেন সে ক্ষেত্রে এই ব্যবহার করতে চান (যেমন অনপজ (), ইত্যাদি): inputManager.hideSoftInputFromWindow((null == getCurrentFocus()) ? null : getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
পিটার আজতাই

5
আপনাকে প্রসঙ্গ আমদানি করতে হবে।
Si8

4
সতর্কতা: কীবোর্ড ইতিমধ্যে লুকানো থাকলে এনপিই নিক্ষেপ করে। এটি এড়াতে পিটারের মন্তব্য অনুসরণ করুন।
ডন ল্যারিক্স

অপ্রাসঙ্গিক বোতামে ক্লিক করার পরে কীবোর্ডটি কেন প্রদর্শিত হচ্ছে? কেউ কিছু ব্যাখ্যা বা একটি লিঙ্ক সরবরাহ করতে পারেন?
kommradHomer

1
মোহন মত কাজ!
এআরআইএফ

59
mMyTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            // hide virtual keyboard
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(m_txtSearchText.getWindowToken(), 
                                      InputMethodManager.RESULT_UNCHANGED_SHOWN);
            return true;
        }
        return false;
    }
});

এটা আমার জন্য কাজ করে. ধন্যবাদ!
আমান গোয়েল

29

নীচে কোড ব্যবহার করুন

your_button_id.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        try  {
            InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        } catch (Exception e) {

        }
    }
});

2
সাধারণ নাল চেকের পরিবর্তে ব্যতিক্রম ধরা, গুরুত্ব সহকারে ?!
ডাঃ গ্লাস

আমার জন্য কাজ করা, বোতাম ক্লিকের কীবোর্ডটি লুকায়
ashishdhiman2007

আমার যা প্রয়োজন তার সহজ সমাধান: অনুসন্ধান বোতামটি ক্লিক করার পরে কীবোর্ডটি লুকান।
দাউদম্যান 71

13

OnEditorActionListenerআপনার এডিটভিউয়ের জন্য আপনার প্রয়োগ করা উচিত

public void performClickOnDone(EditView editView, final View button){
    textView.setOnEditorActionListener(new OnEditorActionListener() {

        @Override
        public boolean onEditorAction(EditView v, int actionId, KeyEvent event) {
            hideKeyboard();
            button.requestFocus();
            button.performClick();
            return true;
        }
    });

এবং আপনি কীবোর্ডগুলি এর মাধ্যমে লুকান:

public void hideKeybord(View view) {
    inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),
                                  InputMethodManager.RESULT_UNCHANGED_SHOWN);
}

আপনার বোতামটি ব্যবহার করে কীবোর্ডটি লুকিয়ে রেখে ফায়ার করা উচিত onClickListener

এখন ভার্চুয়াল কীবোর্ড এবং বোতামে 'সম্পন্ন' ক্লিক করা একই কাজ করবে - কীবোর্ডটি হাইড করুন এবং ক্লিক করুন ক্রিয়া করুন।


দুর্দান্ত, তবে আমি বেশ অনুসরণ করছি না। আমি মনে করি পোস্টটি কিছু কোড খেয়েছে (আপনার নমুনায় "পাবলিক শূন্য" এর পরে কিছুই নেই)। আমি আমার ক্রিয়াকলাপের অনক্রিট পদ্ধতিতে অনএডিটরঅ্যাকশনলিস্টার সেট করার চেষ্টা করেছি, তবে সেটঅনএডিটরঅ্যাকশনলিস্টনার কী তা তা জানে না। আমি একটি "বেনামে অভ্যন্তর প্রকার" বিজ্ঞপ্তি পাই। (আমি এটি আমার ক্রিয়াকলাপের ক্রিয়্যাট
অ্যান্ড্রু

1
দেখে মনে হচ্ছে এই কোডটিতে বেশ কয়েকটি ভুল রয়েছে তবে এটি সঠিক ধারণা। একটি কিছুর জন্য, OnEditorActionListener ইন্টারফেসটি একটি অভ্যন্তর শ্রেণি, সুতরাং আপনাকে এটি স্পষ্টভাবে আমদানি করতে হবে (Eclipse এই ক্ষেত্রে এটি আপনার জন্য করবে না) বা এটি হিসাবে উল্লেখ করুন TextView.OnEditorActionListener
ম্যাট্রিক্সফ্রোগ

আমার কিছুটা কষ্ট হচ্ছে আমি এডিটরএকশনলিস্টনার প্রয়োগ করেছি (পাবলিক ক্লাস সার্চঅ্যাক্টিভিটি, তালিকা-অ্যাক্টিভিটি প্রয়োগ করে অনক্লিক্লিশনার, অন-এডিটরএকশনলিস্টেনার), আমি আমার এডিটেক্সট (mSearchText.setOnEditorActionListener (এই);) এর সাথে একটি শ্রোতা সংযুক্ত করেছি, তবে একিপিশন উইন্ডিটর ওয়েলটাইমঅর্ডারএন্ডরেডরেটেডঅর্ডারএন্ট্রাইটিংএর অনুমতি দেয় (টেক্সটভিউ ভি, ইন অ্যাকশনআইড, কী-ইভেন্ট ইভেন্ট))। এটি বলেছে এটি অবশ্যই একটি সুপারক্লাস পদ্ধতিকে ওভাররাইড করতে হবে। কোন ধারনা?
অ্যান্ড্রু

হাই, আপনি আপনার এডিটভিউ.সেটঅনএডিটরঅ্যাকশনলিস্টনার (নতুন অনএডিটরঅ্যাকশনলিস্টার () ing .... টাইপ করে আপনার অনএডিটরঅ্যাকশনলিস্টনার ইনলাইন করতে পারবেন
পিক্সেল

11

আপনার বোতাম ক্লিক ইভেন্টের মধ্যে নিম্নলিখিত কোড যুক্ত করুন:

InputMethodManager inputManager = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);

1
মোহন মত কাজ!
কোডারপিসি

10

যেহেতু আপনার কেবলমাত্র একটি সম্পাদনা পাঠ্য রয়েছে তারপরে আপনার বোতাম ক্লিকের ভিতরে সম্পাদনা পাঠ্যের জন্য কল করুন এবং বাকীটি সিস্টেম দ্বারা পরিচালিত হবে। আপনার যদি একাধিক এডিটেক্সট থাকে তবে এটি এত কার্যকর হবে না কারণ আপনাকে প্রথমে দৃষ্টি নিবদ্ধ করা এডিটেক্সট পেতে হবে। তবে আপনার ক্ষেত্রে এটি পুরোপুরি কার্যকর হবে

myedittext.onEditorAction(EditorInfo.IME_ACTION_DONE)

1
আপনার সমাধান কেন কাজ করে যাতে অন্যরা বুঝতে পারে এবং সেখান থেকে শিখতে পারে তার ব্যাখ্যা আপনি রেখে দিতে পারেন? ধন্যবাদ!
শান

শিওর শন আমি কেবল শীর্ষটি সম্পাদনা করেছি, যেহেতু আমি পোজ করাতে নতুন নতুন এটি স্পষ্ট না হলে কেবল আমাকে জানাতে হবে এবং আমি বোতামটি অনক্লিক দিয়ে প্রসারিত করব
লারেট

আমার বিশ্বাস করুন এটি করার অন্যতম উপায় এটি। ধন্যবাদ @ লেয়ার্ট
উইটভল্ট

9

ক্রিয়াকলাপের জন্য,

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

খণ্ডগুলির জন্য, getActivity () ব্যবহার করুন

। GetActivity () getSystemService ();

। GetActivity () getCurrentFocus ();

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);

7

এই সমাধানটি আমার পক্ষে নিখুঁতভাবে কাজ করে:

private void showKeyboard(EditText editText) {
    editText.requestFocus();
    editText.setFocusableInTouchMode(true);
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(editText, InputMethodManager.RESULT_UNCHANGED_SHOWN);
    editText.setSelection(editText.getText().length());
}

private void closeKeyboard() {
    InputMethodManager inputManager = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
}

3

এটা চেষ্টা কর...

  1. কীবোর্ড দেখানোর জন্য

    editText.requestFocus();
    InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
  2. হাইড কীবোর্ডের জন্য

    InputMethodManager inputManager = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); 
    inputManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);

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

1
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm =(InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);enter code here}

ওহে! যদিও এই উত্তরটি @ অ্যান্ড্রুয়ের প্রয়োজনীয়তাগুলি যথেষ্ট হতে পারে তবে ভবিষ্যতে পাঠকরা এটির পুরোপুরি উপকৃত হতে পারে তা নিশ্চিত করার জন্য আপনি যদি এটি কিছু ব্যাখ্যা দিয়ে প্রসারিত করতে পারেন তবে দুর্দান্ত হবে!
derM

1

কোটলিন উদাহরণ:

val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

খণ্ড থেকে:

inputMethodManager.hideSoftInputFromWindow(activity?.currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)

ক্রিয়াকলাপ থেকে:

inputMethodManager.hideSoftInputFromWindow(currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)

0

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

// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}

0

ক্র্যাশ নুল পয়েন্ট ব্যতিক্রম ফিক্স: আমার একটি কেস ছিল যখন ব্যবহারকারী বোতামটি ক্লিক করেন তখন কীবোর্ডটি না খোল। GetC فعেনফোকাস () কোনও নাল নয় তা যাচাই করতে আপনাকে একটি বিবৃতি লিখতে হবে:

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

-2

আপনি যদি সেট করেন android:singleLine="true", স্বয়ংক্রিয়ভাবে বোতামটি কীবোর্ডটি আড়াল করে ¡

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