এডিটেক্সট ফোকাস করা হলে কীভাবে সফট-কীবোর্ড প্রদর্শন করবেন


461

যখন কোনও EditTextদৃষ্টি নিবদ্ধ করা হয় তখন আমি স্বয়ংক্রিয়ভাবে সফট-কীবোর্ডটি দেখতে চাই (যদি ডিভাইসে কোনও শারীরিক কীবোর্ড না থাকে) এবং আমার দুটি সমস্যা আছে:

  1. যখন আমার Activityপ্রদর্শিত হয়, আমার EditTextদৃষ্টি নিবদ্ধ করা হয় তবে কীবোর্ড প্রদর্শিত হয় না, কীবোর্ডটি দেখানোর জন্য আমার এটিতে আবার ক্লিক করতে হবে (আমার প্রদর্শিত হওয়ার পরে এটি প্রদর্শিত হওয়া উচিত Activity)।

  2. এবং আমি যখন কীবোর্ডে সম্পন্ন ক্লিক করি তখন কীবোর্ডটি দ্রবীভূত হয় তবে EditTextস্থির থাকে এবং আপনি চান না (কারণ আমার সম্পাদনাটি সম্পন্ন হয়েছে)।

আবার শুরু করার জন্য, আমার সমস্যাটি আইফোনের মতো আরও কিছু হ'ল: যা কীবোর্ডকে আমার EditTextরাজ্যের সাথে সিঙ্ক করে রাখে (দৃষ্টি নিবদ্ধ করা / মনোনিবেশ করা হয় না) এবং কোনও শারীরিক ক্ষেত্রে অবশ্যই কোনও সফট-কীবোর্ড উপস্থাপন করে না।


আমার কাছে কেবলমাত্র একটি প্রাথমিক সম্পাদনা পাঠ্য রয়েছে যেমন: <ডিডিটেক্সট অ্যান্ড্রয়েড: আইডি = "@ + আইডি / মাইএডিটটেক্সট" অ্যান্ড্রয়েড: লেআউট_উইথ = "ফিল_প্যারেন্ট" অ্যান্ড্রয়েড: লেআউট_হাইট = "র‌্যাপ_কন্টেন্ট" অ্যান্ড্রয়েড: imeOptions = "অ্যাকশনডোন" /> এবং আমার ক্রিয়াকলাপে আমি এটি: editText editTxt = (editText) FindViewById (R.id.myEditText); editTxt.requestFocus ();
লুডোভিচ ল্যান্ড্রি

2
এই আমাকে ভাল সাহায্য করেছে এই পোস্টে কোনো উত্তর চেয়ে stackoverflow.com/a/2418314/1491212
Armel Larcier

উত্তর:


628

নরম কীবোর্ড প্রদর্শিত হতে বাধ্য করতে, আপনি ব্যবহার করতে পারেন

EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
yourEditText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);

এবং ফোকাসটি সরানোর জন্য EditText, দুঃখের সাথে Viewফোকাসটি ধরার জন্য আপনার একটি ডামি থাকা দরকার ।

আশা করি এটা কাজে লাগবে


এটি বন্ধ করতে আপনি ব্যবহার করতে পারেন

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

এটি একটি কথোপকথনে এটি ব্যবহারের জন্য কাজ করে

public void showKeyboard(){
    InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}

public void closeKeyboard(){
    InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
}

2
যদি আমি এটি করি, ক্রিয়াকলাপটি উপস্থিত হওয়ার সময় সফ্ট-কীবোর্ডটি প্রদর্শিত হয় (এটি ভাল) তবে যখন আমার ফোকাসটি সম্পাদনা পাঠ ছেড়ে দেয় এবং উদাহরণস্বরূপ একটি বোতামে যায়, কীবোর্ডটি থাকে (এটি খারাপ)।
লুডোভিচ ল্যান্ড্রি

157
ইতিমধ্যে ফোকাস রয়েছে এমন একটি কথোপকথনে সম্পাদনা পাঠের জন্য আমার পক্ষে কাজ করে না। নিশ্চিত কেন।
ম্যাথিয়াস

10
@ আবদুল্লাহ বেনহ্যামউ, সম্ভবত একটি অনুরোধ করছেন নরম ইনপুট দেখানোর আগে আপনার সম্পাদনা পাঠ্যকে ফোকাস কলটি আপনার সমস্যার সমাধান করতে পারে। এটা আমার জন্য।
r1k0

18
@ আবদুল্লাহ বেনহ্যামউ, আপনার ডায়ালগফ্রেগমেন্টের অনক্রিট (): getDialog ()। GetWindow ()। সেটসফট ইনপুটমোড (উইন্ডোম্যানেজ.লয়আউটপ্যারামস.স.ফ.আইএনপিইউএসএসটিআইভিসিবিএল);
ফিলিপ

22
yourEditText.requestFocus()এখানে বর্ণিত হিসাবে একত্রে কাজ করেছেন: স্ট্যাকওভারফ্লো.com
বিবেক পান্ডে

231

আমারও একই সমস্যা ছিল। GONE থেকে VISIBLE এ সম্পাদনা পাঠ্য দৃষ্টিভঙ্গি সম্পাদনের পরপরই আমাকে ফোকাসটি সেট করতে হয়েছিল এবং নরম কীবোর্ডটি প্রদর্শন করতে হয়েছিল। আমি নিম্নলিখিত কোড ব্যবহার করে এটি অর্জন করেছি:

new Handler().postDelayed(new Runnable() {

    public void run() {
//        ((EditText) findViewById(R.id.et_find)).requestFocus();
//              
        EditText yourEditText= (EditText) findViewById(R.id.et_find);
//        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//        imm.showSoftInput(yourEditText, InputMethodManager.SHOW_IMPLICIT);

        yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
        yourEditText.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));                           
    }
}, 200);

এটি আমার জন্য 100 মিমি দেরি করে কাজ করে তবে কোনও বিলম্ব ছাড়াই বা কেবল 1 মিমি দেরি করে ব্যর্থ হয়।

কোডের মন্তব্য করা অংশটি অন্য পদ্ধতির দেখায়, যা কেবলমাত্র কিছু ডিভাইসে কাজ করে। আমি ওএস সংস্করণ ২.২ (এমুলেটর), ২.২.১ (বাস্তব ডিভাইস) এবং ১.6 (এমুলেটর) পরীক্ষা করেছি।

এই পদ্ধতির ফলে আমার অনেক বেদনা বাঁচল।


48
আমি জানতাম না কিছু একই সময়ে কুরুচিপূর্ণ এবং এত সুন্দর হতে পারে। তোমাকে অনেক ধন্যবাদ!
মেকলে

15
@ জেলিফিশ এটিতে একটি ট্যাপ সিমুলেট করে EditText। এটি পড়ার জন্য অন্যদের জন্য, নতুন তৈরি করার পরিবর্তে Handlerআপনি নিজেই উইজেটে এই View.postDelayed()পদ্ধতিটি ব্যবহার করতে পারেন yourEditText
টনি চ্যান

5
এটি একটি হ্যাক - ডেভিড চ্যান্ডলারের আরও ভাল সমাধান।
বেন বেডারসন

4
ডেভিড চ্যান্ডলারের সমাধান যদি সমস্ত অ্যান্ড্রয়েড সংস্করণ / ডিভাইস জুড়ে কাজ করে এবং যখন ভিসিবিলিটি সবেমাত্র GONE থেকে VISIBLE এ পরিবর্তিত হয়েছিল, তবে হ্যাঁ - পরিবর্তে তার সমাধানটি আপনার ব্যবহার করা উচিত।
মাইক কেসকিনভ

3
একমত। আপনি কি আরও ভাল সমাধান জানেন যা সমস্ত অ্যান্ড্রয়েড স্বাদে কাজ করে?
মাইক কেসকিনভ

162

কীবোর্ডটি প্রদর্শিত হওয়ার জন্য, ব্যবহার করুন

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

এই পদ্ধতিটি সরাসরি ইনপুটমথডম্যানেজারের চেয়ে বেশি নির্ভরযোগ্য।

এটি বন্ধ করতে, ব্যবহার করুন

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

12
কেউ দয়া করে ব্যাখ্যা করতে পারেন কেন এটি সরাসরি চালনার চেয়ে আরও নির্ভরযোগ্য InputMethodManager? (একটির জন্য, এটি রাউকড্রাগের সমাধানের বিপরীতে কার্যকর হয় না))
ম্যাথু কুইরোস

5
আমার জন্যও কাজ করে না। অ্যান্ড্রয়েড ২.৩.৫ এ কাজ করছে। raukodraug এর সমাধানটি আমার পক্ষে কাজ করে। সংস্করণ নির্ভরতার জন্য অনুসন্ধান করা কিন্তু একটিটি খুঁজে পেল না।
হুগো লগম্যানস

2
এটি অ্যান্ড্রয়েড ৪.৪.২ এ আমার জন্য কাজ করেছে। এই পোস্টের সমাধান হিসাবে নির্বাচিত ইনপুটমেথড ম্যানেজার পদ্ধতিটি আমার পক্ষে কার্যকর হয়নি।
ফিল

উত্তরে পদ্ধতিটি ব্যবহার করার পরে আমি এটি যুক্ত করেছিলাম এবং এটি কাজ করে, তবে এটি ছাড়া এটি কাজ করে না। ধন্যবাদ
Manny265

2
অ্যান্ড্রয়েড ৪.৪.২ এ আমার জন্য কাজ করেনি। এটি কীবোর্ডটি দেখায় তবে এটি লুকিয়ে রাখেনি।
জন জে স্মিথ

87

যখন আর কিছুই কাজ করে না, এটিকে প্রদর্শন করতে বাধ্য করুন :

editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

এবং তারপরে, যদি আপনি এটি বন্ধ করতে চান তবে অন পজ () উদাহরণস্বরূপ, আপনি কল করতে পারেন:

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

4
আপনি ঠিক বলেছেন, @ বোলিং! যখন আর কিছুই কাজ করে না, আপনার কোড আমাকে বাঁচায়। ধন্যবাদ!
উইলিয়ান পাইকাসাও

3
আপনার কোডটি কেবলমাত্র আমার পক্ষে কাজ করেছিল এবং আমি এই পৃষ্ঠার প্রতিটি সমাধান চেষ্টা করেছিলাম! অনেক ধন্যবাদ!
মাততিয়া রুজিগেরো

4
এটা জোর করবেন না। কিছু ক্ষেত্রে যখন আপনি অগ্রভাগ থেকে ব্যাকগ্রাউন্ডে যান কীবোর্ডটি সেখানে থাকবে কারণ আপনি এটি বাধ্য করেছিলেন। এটি একটি বিভাজন সমস্যা তবে আমি এটি স্যামসাং জুটিতে দেখেছি।
j2emanue

আমার কাছে সর্বদা পজ () কীবোর্ডটি বন্ধ করার কোড থাকে যেহেতু আপনি এটি জোর করে না নিলেও এটি আটকে থাকতে দেখেছি।
বোলিং

এটি কাজ করেছিল, তবে অন্যান্য স্ক্রিনে চলে গেলে এটি এখনও উন্মুক্ত থাকে
সিথু

75

নিম্নলিখিত কোডটি গুগলের ৪.১ সোর্স কোড থেকে অনুসন্ধান ভিউয়ের জন্য স্তম্ভিত। অ্যান্ড্রয়েডের স্বল্প সংস্করণেও কাজ করে দেখে মনে হচ্ছে।

private Runnable mShowImeRunnable = new Runnable() {
    public void run() {
        InputMethodManager imm = (InputMethodManager) getContext()
                .getSystemService(Context.INPUT_METHOD_SERVICE);

        if (imm != null) {
            imm.showSoftInput(editText, 0);
        }
    }
};

private void setImeVisibility(final boolean visible) {
    if (visible) {
        post(mShowImeRunnable);
    } else {
        removeCallbacks(mShowImeRunnable);
        InputMethodManager imm = (InputMethodManager) getContext()
                .getSystemService(Context.INPUT_METHOD_SERVICE);

        if (imm != null) {
            imm.hideSoftInputFromWindow(getWindowToken(), 0);
        }
    }
}

তারপরে, কন্ট্রোল / ক্রিয়াকলাপ তৈরি হওয়ার সাথে সাথে নীচের কোডটি যুক্ত করা দরকার। (আমার ক্ষেত্রে এটি কোনও ক্রিয়াকলাপের চেয়ে সম্মিলিত নিয়ন্ত্রণ)।

this.editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        setImeVisibility(hasFocus);
    }
});

ধন্যবাদ! এটি আশ্চর্যজনকভাবে ভাল কাজ করে। এবং এই সমাধানটি আমি এই বিষয়ে যে সমস্ত উত্তর এবং বিষয় পড়ছি তা থেকে আমি আরও আরামদায়ক।
রুই

37
:-D setImeVisibility(hasFocus)?
ম্যাথিয়াস

আমি এই পদ্ধতিটি চেষ্টা করেছি যেহেতু আমি আসলে "আমার নিজের অনুসন্ধান ভিউ ঘূর্ণায়মান" (এটি করতে চাইনি তবে কারণগুলি ছিল)। এটি আমার জন্য ক্রিয়াকলাপ শুরু করা ব্যতীত কাজ করেছিল। আমি অ্যান্ড্রয়েড যুক্ত করেছি: উইন্ডোসফট ইনপুটমড = ক্রিয়াকলাপে "সর্বদাভিজিল" এবং ইতিমধ্যে অনুরোধটি ছিল ফোকাস () সম্পাদনা পাঠ্যে কল করা হয়েছিল। চ্যাম্পের মতো কাজ করে।
javahead76

কোনও ধারণা মুছে ফেলার কলব্যাকের প্রয়োজন (এমশোআইরআরনেবল)? আমি ভেবেছিলাম একবার রানাবলকে কিউ থেকে চালানোর জন্য বাছাই করা হয়ে গেলে, একই সাথে কি কিউ থেকেও তা মুছে ফেলা হবে?
চেওক ইয়ান চেং

1
বিভিন্ন প্রকারের চেষ্টা করার পরে, এটি কেবলমাত্র আমার জন্য ধারাবাহিকভাবে কাজ করেছিল (অ্যান্ড্রয়েড 4.42)। থেক্স
জন জে স্মিথ

34

android:windowSoftInputMode="stateAlwaysVisible" -> ম্যানিফেস্ট ফাইলে।

edittext.requestFocus(); -> কোডে।

এটি এমন সফ্ট কীবোর্ড খুলবে যেখানে সম্পাদনা-পাঠ্যের ক্রিয়াকলাপটি উপস্থিত হওয়ার সাথে সাথে অনুরোধের অনুরোধ থাকবে।


2
এটি কার্যকলাপ তৈরিতে কীবোর্ডটি খুলবে।
xpto

প্রশ্নের উত্তর দেয় না, তবে আমাকে সাহায্য করেছে :)
এসটিওগেনে

22 এপ্রিল-এ রিকোয়েস্টফোকস ছাড়াই কী খুলুন
ডেভিড

আমার ক্ষেত্রে ভাল কাজ করে। আমি অবাক হলাম কেন শুধু এক্সএমএল থেকে অনুরোধ ফোকাস অ্যাট্রিবিউট এছাড়াও উল্লেখ করা প্রয়োজন manifest!
Sud007

30

নীচের কোডটি সহ কিছু সাধারণ ক্ষেত্রে আমি সাম্প্রতিক ভাগ্য পেয়েছি। আমি সমস্ত পরীক্ষা শেষ করেছি না তবে ....

EditText input = (EditText) findViewById(R.id.Input);
input.requestFocus();    
input.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
input.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));

এবং প্রিস্টো কীবোর্ড প্রদর্শিত হবে।


আমার ক্ষেত্রে আমার কাছে কিছু optionচ্ছিক তথ্য যুক্ত করার জন্য একটি বোতাম ছিল। বাটন.অননে ক্লিক করে হ্যান্ডলারের উপরের কোডটি alচ্ছিক তথ্যের ইনপুটটির জন্য নরম কীবোর্ডকে বাধ্য করতে বাধ্য করা হয়েছিল। ড্রয়েড 2.2.2
ডেন্ট

এটি একটি ভাল সমাধান তবে ভুলে যাবেন না যে আপনার কোনও মোশনইভেন্ট অবজেক্ট তৈরি করা উচিত এবং ব্যবহারের পরে তাদের উপর রিসাইকেল () কল করুন, পরবর্তী একজন কলকারী পুনরায় ব্যবহার করতে পারেন।
জিম্বব

আপনার যুক্তি হিসাবে ACTION_UP সহ আপনার কেবল একটি প্রেরণ-টাচ ইভেন্ট () প্রয়োজন ..
মোহাম্মদ জুনায়েদ

15

আপনি নরম কীবোর্ডটি উপস্থিত হতে বাধ্য করার চেষ্টা করতে পারেন, এটি আমার পক্ষে কাজ করে:

...
dialog.show();
input.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

1
এটি আমার পক্ষে কাজ করে ... আমি এই ইনপুটমেথডম্যানেজার ইমিট = (ইনপুটমেথডম্যানেজার) getSystemService (প্রসঙ্গ। INPUT_METHOD_SERVICE) চেষ্টা করেছিলাম; im.showSoftInput (নাম, ইনপুটমেডোড ম্যানেজ। SHOW_IMPLICIT); অথবা উইন্ডো () .সেটসফুট ইনপুটমোড (উইন্ডো ম্যানেজ। লেআউটপ্যারামস.স.ফ.এফ.আইএনপিইউএসএসটিএভিসিআইবিএল); তবে তাদের কেউই কাজ করছিল না।
Günay Gültekin

10

কখনও কখনও রাকোড্রাগের উত্তর কার্যকর হয় না। আমি কিছু পরীক্ষার এবং ত্রুটি দিয়ে এটিকে এইভাবে তৈরি করেছি:

public static void showKeyboard(Activity activity) {
    if (activity != null) {
        activity.getWindow()
                .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }
}

public static void hideKeyboard(Activity activity) {
    if (activity != null) {
        activity.getWindow()
                .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    }
}

এবং সম্পাদনা পাঠ অংশ:

    editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                hideKeyboard(getActivity());
            } else {
                showKeyboard(getActivity());
            }
        }
    });

1
এটিই একমাত্র সমাধান যা অ্যান্ড্রয়েড 5
ইউজার 1021430

10

কীবোর্ড আড়াল করতে, এটি ব্যবহার করুন:

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

এবং কীবোর্ড প্রদর্শন করতে:

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

একটি ডায়ালগফ্র্যাগমেন্টের জন্য, আপনি এটিকে ওভাররাইডে কল onStart()করতে পারেন এবং আপনি getDialog().getWindow()বিকল্প হিসাবে ব্যবহার করতে পারেন getActivity().getWindow()
মিস্টার-আইডিই

10

এবং কোটলিনের জন্য কেবল এই এক্সটেনশনগুলি ব্যবহার করুন:

fun EditText.showKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}

fun EditText.hideKeyboard() {
    val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
    imm.hideSoftInputFromWindow(this.windowToken, 0)
}

আমি কি খুঁজছিলাম
lasec0203

8

খণ্ডের জন্য, নিশ্চিত এটি কাজ করছে:

 displayName = (EditText) view.findViewById(R.id.displayName);
    InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);

7

showSoftInput আমার পক্ষে মোটেও কাজ করছিল না।

আমি অনুভব করেছি যে আমার ইনপুট মোডটি সেট করতে হবে: (এখানে প্রকাশের ক্রিয়াকলাপের উপাদানটিতে)

android:windowSoftInputMode="stateVisible" 

6

সফট কীবোর্ডের সাথে বিশ্বাস করুন বা করবেন না আমার সমস্যার সমাধান হয়েছিল যখন আমি আবিষ্কার করেছি যে ক্রিয়াকলাপ অ্যানিমেশনগুলি সফ্ট কীবোর্ডটি অক্ষম করতে পারে। আপনি যখন উদ্দেশ্যটির সাথে কল করবেন

i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

এবং

overridePendingTransition(0, 0);

এটি সফট কীবোর্ডটি আড়াল করতে পারে এবং এটি দেখানোর কোনও উপায় নেই।


6

আমার বিভিন্ন পরিস্থিতিতে একই সমস্যা ছিল এবং আমি সমাধানগুলি কিছুতে কাজ পেয়েছি তবে অন্যের মধ্যে কাজ করতে পারি না তাই এখানে একটি সংমিশ্রণ সমাধান রয়েছে যা বেশিরভাগ পরিস্থিতিতে আমি খুঁজে পেয়েছি:

public static void showVirtualKeyboard(Context context, final View view) {
    if (context != null) {
        final InputMethodManager imm =  (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        view.clearFocus();

        if(view.isShown()) {
            imm.showSoftInput(view, 0);
            view.requestFocus();
        } else {
            view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
                @Override
                public void onViewAttachedToWindow(View v) {
                    view.post(new Runnable() {
                        @Override
                        public void run() {
                            view.requestFocus();
                            imm.showSoftInput(view, 0);
                        }
                    });

                    view.removeOnAttachStateChangeListener(this);
                }

                @Override
                public void onViewDetachedFromWindow(View v) {
                    view.removeOnAttachStateChangeListener(this);
                }
            });
        }
    }
}

6
editText.post(new Runnable() {
    @Override
    public void run() {
        InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);
    }
});

6

আমি এখানে সবকিছু সংযুক্ত করেছি এবং আমার জন্য এটি কাজ করে:

public static void showKeyboardWithFocus(View v, Activity a) {
    try {
        v.requestFocus();
        InputMethodManager imm = (InputMethodManager) a.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);
        a.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

6

এটা আমার জন্য কাজ করেছে। কীবোর্ডটি দেখানোর জন্য আপনি এটি দিয়ে চেষ্টা করতে পারেন:

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

5

টুকিটাকি সংকেতলিপি . । ।

public void hideKeyboard(Context activityContext){

    InputMethodManager imm = (InputMethodManager)
            activityContext.getSystemService(Context.INPUT_METHOD_SERVICE);

    //android.R.id.content ( http://stackoverflow.com/a/12887919/2077479 )
    View rootView = ((Activity) activityContext)
            .findViewById(android.R.id.content).getRootView();

    imm.hideSoftInputFromWindow(rootView.getWindowToken(), 0);
}

public void showKeyboard(Context activityContext, final EditText editText){

    final InputMethodManager imm = (InputMethodManager)
            activityContext.getSystemService(Context.INPUT_METHOD_SERVICE);

    if (!editText.hasFocus()) {
        editText.requestFocus();
    }

    editText.post(new Runnable() {
        @Override
        public void run() {
            imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
        }
    });
}

5

Kotlin ফোকাসে কীবোর্ড দেখানোর জন্য এক্সটেনশন।

এটি পূর্ববর্তী প্রতিক্রিয়াগুলির সংমিশ্রণ যা খুব দীর্ঘ বা অসম্পূর্ণ যেখানে।

এই এক্সটেনশনটি বার্তার কাতারে একটি চলমান পোস্ট করে যা ফোকাসের অনুরোধের পরে নরম কীবোর্ড দেখায়:

fun View.showSoftKeyboard() {
    post {
        if (this.requestFocus()) {
            val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm?.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
        }
    }
}

পরে যখন প্রয়োজন তখন যেকোন ভিউ থেকে কল করুন:

editText.showSoftKeyboard()

4

কেবল অ্যান্ড্রয়েড যুক্ত করুন: ম্যানিফেস্ট ফাইলে উইন্ডোসফট ইনপুটমড = "স্টেটহিডেন" ...


4
final InputMethodManager keyboard = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

4

আপনার ম্যানিফেস্টের ভিতরে:

android:windowSoftInputMode="stateAlwaysVisible"- শুরুতে কীবোর্ড চালু হয়েছিল। android:windowSoftInputMode="stateAlwaysHidden" - প্রাথমিকভাবে লুকানো কীবোর্ড।

আমি এটি ব্যবহার করতেও পছন্দ করি "adjustPan"কারণ যখন কীবোর্ডটি চালু হয় তখন স্ক্রীন স্বয়ংক্রিয়ভাবে সামঞ্জস্য হয়।

 <activity
      android:name="YourActivity"
      android:windowSoftInputMode="stateAlwaysHidden|adjustPan"/>

4

আপনার সম্পাদনা পাঠের দর্শনটিতে এই লাইনটি কেবল যুক্ত করুন:

android:isScrollContainer="true"

এবং টাডা - কীবোর্ড স্বয়ংক্রিয়ভাবে দেখাতে শুরু করেছে!

আমি একই সমস্যা ছিল এবং এই সহজ এবং অদ্ভুত সমাধান আবিষ্কার।

যেমন এখানে ইতিমধ্যে 333392439 দ্বারা উল্লিখিত হয়েছে, ফোকাসের ভিত্তিতে কীবোর্ডের উপস্থিতিটি কোনওভাবে এক্সএমএল ফাইলে স্ক্রোল উপাদানটির উপস্থানের সাথে বেঁধে দেওয়া হয়েছে।

এমনকি একই এক্সএমএলে উপরে উল্লিখিত রেখার সমন্বিত অন্য সম্পাদনা পাঠের দৃশ্যের উপস্থিতি কীবোর্ডকে উপস্থিত করে তোলে এডিটেক্সটগুলির মধ্যে বর্তমানে কোনটি কেন্দ্রীভূত তা বিবেচনা করে না।

আপনার এক্সএমএল ফাইলে স্ক্রোল উপাদান সমন্বিত আপনার কমপক্ষে একটি দৃশ্যমান ভিউ থাকলে - কীবোর্ডটি ফোকাসে স্বয়ংক্রিয়ভাবে উপস্থিত হবে।

যদি কোনও স্ক্রোল না থাকে - তবে কীবোর্ড প্রদর্শিত হওয়ার জন্য আপনাকে সম্পাদনা পাঠ্য ক্লিক করতে হবে।


এটি খুবই অদ্ভুত কিন্তু এটা স্পষ্টভাবে কাজ করে - আমি প্রয়াস করার সময় requesFocus()একটি ক্লিক হ্যান্ডলার মধ্যে থেকে এবং এই একমাত্র উপায় একটি সুনির্দিষ্ট showSoftInput SHOW_FORCED ছাড়া অন্য রয়েছে
সৃষ্টি

পবিত্র, ধন্যবাদ মানুষ। এটি কেন কাজ করে তার কোনও ক্লু নেই তবে আমি বিভিন্ন নির্মাতাদের 8 টি ডিভাইসে এটি পরীক্ষা করেছি এবং এটি সর্বদা কাজ করেছে!
আন্তোনিও ভ্লাসিক

3

উপরে (প্রদত্ত সকল সমাধান InputMethodManager মধ্যে মিথষ্ক্রিয়া OnFocusChangeListener.onFocusChange শ্রোতা আপনার সংযুক্ত editText কাজ করে জরিমানা যদি আপনি কার্যকলাপ একক সম্পাদন করা আছে।

আমার ক্ষেত্রে আমার দুটি সম্পাদনা আছে।

 private EditText tvX, tvY;
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 tvX.setOnFocusChangeListener(this);
    tvY.setOnFocusChangeListener(this);

@Override
public void onFocusChange(View v, boolean hasFocus) {       
    InputMethodManager imm =  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if(tvX.hasFocus() || tvY.hasFocus()) {            
        imm.showSoftInput(v, 0);            
    } else {
        imm.hideSoftInputFromWindow(v.getWindowToken(), 0);         
    }       
};

আমি লক্ষ্য করেছি যে অনফোকাস চেঞ্জটি হ্যাশফোকাস = সত্য (কীবোর্ড দেখানো হয়েছে) দিয়ে টিভিএক্সের জন্য ট্রিগার করা হয়েছে তবে তারপরে টিভি ফাইস = ট্রু (কীবোর্ড লুকানো) রয়েছে। শেষ পর্যন্ত কোনও কীবোর্ড দৃশ্যমান ছিল না।

জেনারেল সলিউশনটির সঠিক বিবৃতি থাকা উচিত যদি "এডিটেক্সট পাঠ্যটিতে ফোকাস থাকে তবে কীবোর্ড দেখান"


3

ক্রিয়াকলাপের আপনার অনারিউম () বিভাগে আপনি পদ্ধতিটি কেয়ারবোর্ড () কল করতে পারেন;

 onResume() {
     EditText yourEditText= (EditText) findViewById(R.id.yourEditText);
     bringKeyboard(yourEditText);
 }


  protected boolean bringKeyboard(EditText view) {
    if (view == null) {
        return false;
    }
    try {
      // Depending if edittext has some pre-filled values you can decide whether to bring up soft keyboard or not
        String value = view.getText().toString();
        if (value == null) {
            InputMethodManager imm = (InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
            return true;
        }
    } catch (Exception e) {
        Log.e(TAG, "decideFocus. Exception", e);
    }
    return false;
  }

কি WidgetUtils.showKeyboard? এটি এখানে সবচেয়ে গুরুত্বপূর্ণ বিট।
TWiStErRob

2

উত্তরগুলির কোনওটিই আমার পক্ষে কাজ করেনি। এখানে একটি সহজ উপায়।

searchEditText.setVisibility(View.VISIBLE);
                final Handler handler=new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        searchEditText.requestFocus();
                    }
                }, 400);

400 মিটারের জন্য কেবল অনুরোধফোকাস () পদ্ধতিটি বিলম্ব করেছে।


অনেক ধন্যবাদ, এটি কীবোর্ড প্রদর্শনের জন্য কিছুটা বিলম্ব প্রয়োজন ...
এইচএইচ 114

1

আমি একটি অদ্ভুত আচরণ আবিষ্কার করেছি, যেহেতু আমার অ্যাপ্লিকেশনগুলির একটিতে, নরম কীবোর্ডটি স্বয়ংক্রিয়ভাবে ক্রিয়াকলাপটি প্রবেশ করানোর সময় প্রদর্শিত হচ্ছে (অনক্রিটটিতে একটি editText.requestFocus () রয়েছে)।

আরও খনন করার সময়, আমি আবিষ্কার করেছি যে এটি ছিল কারণ লেআউটটির চারপাশে একটি স্ক্রোলভিউ রয়েছে। যদি আমি স্ক্রোলভিউটি সরিয়ে ফেলি, তবে আচরণটি মূল সমস্যার বিবৃতিতে বর্ণিত: কেবলমাত্র ইতিমধ্যে দৃষ্টি নিবদ্ধ করা সম্পাদনা পাঠ্য ক্লিক করার পরে নরম কীবোর্ড প্রদর্শিত হবে।

যদি এটি আপনার পক্ষে কাজ করে না, স্ক্রোলভিউতে রাখার চেষ্টা করুন - এটি যাইহোক নিরীহ।


1

অ্যানিমেশন দেখুন ব্যবহার করে আমারও একই সমস্যা হয়েছিল । সুতরাং আমি দেখানো এডিটেক্সটটিতে কোনও কীবোর্ড অ্যাক্সেসের অনুরোধ করার আগে অ্যানিমেশনটি শেষ হওয়ার জন্য অপেক্ষা করার জন্য আমি একটি অ্যানিমেশন শ্রোতা রেখেছি put

    bottomUp.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            if (textToFocus != null) {
                // Position cursor at the end of the text
                textToFocus.setSelection(textToFocus.getText().length());
                // Show keyboard
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(textToFocus, InputMethodManager.SHOW_IMPLICIT);
            }
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }
    });

1

আমি রইথোড্রাগের সাথে একমত হই এজন্য একটি সুইউথভিউ ব্যবহার করে আপনাকে অনুরোধ করতে হবে / স্পষ্ট ফোকাসের অনুরোধ অবশ্যই:

    final ViewSwitcher viewSwitcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);
    final View btn = viewSwitcher.findViewById(R.id.address_btn);
    final View title = viewSwitcher.findViewById(R.id.address_value);

    title.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            viewSwitcher.showPrevious();
            btn.requestFocus();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.showSoftInput(btn, InputMethodManager.SHOW_IMPLICIT);
        }
    });

    // EditText affiche le titre evenement click
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            btn.clearFocus();
            viewSwitcher.showNext();
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(btn.getWindowToken(), 0);
            // Enregistre l'adresse.
            addAddress(view);
        }
    });

শুভেচ্ছা।

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