2012-01-24 15 views
106

मैं एक लेआउट जो इस तरह कुछ दृश्यों में शामिल हैं: परमैं ध्यान केंद्रित कैसे निर्धारित कर सकते हैं (और कीबोर्ड प्रदर्शित) मेरी EditText पर प्रोग्राम के रूप में

<LinearLayout> 
<TextView...> 
<TextView...> 
<ImageView ...> 
<EditText...> 
<Button...> 
</linearLayout> 

मैं कैसे फ़ोकस सेट कर सकते हैं (कुंजीपटल प्रदर्शित) मेरी EditText प्रोग्रामेटिक रूप से?

मैंने यह कोशिश की है और यह केवल तभी काम करता है जब मैं अपना Activity सामान्य रूप से लॉन्च करता हूं, लेकिन जब मैं इसे TabHost में लॉन्च करता हूं, तो यह काम नहीं करता है।

txtSearch.setFocusableInTouchMode(true); 
txtSearch.setFocusable(true); 
txtSearch.requestFocus(); 
+0

एचटी टीपी: //www.android-ios-tutorials.com/93/android-show-hide-soft-keyboard-programmatically/ – Houcine

+0

संभावित डुप्लिकेट [संपादन के समय सॉफ्ट-कीबोर्ड कैसे दिखाएं] [http: // stackoverflow .com/question/5105354/how-to-show-soft-keyboard-when-edittext-is-focus) – raukodraug

उत्तर

224

इस प्रयास करें:

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

http://developer.android.com/reference/android/view/View.html#requestFocus()

+56

यह काम नहीं करता भाई, – Houcine

+0

इस उत्तर से दिखाने के लिए कीबोर्ड को मजबूर करने के लिए कोड के साथ अपडेट किया गया: http://स्टैक ओवरफ़्लो।com/question/5105354/how-to-show-soft-keyboard-when-edittext-is-focus –

+5

यह केवल तभी काम करता है जब मैं सामान्य रूप से अपनी गतिविधि लॉन्च करता हूं, लेकिन जब मैं टैबहोस्ट पर अपनी गतिविधि लॉन्च करता हूं, तो यह काम नहीं करता है, – Houcine

30

showSoftInput बिल्कुल मेरे लिए काम नहीं कर रहा था।

मैं सोचा मैं इनपुट मोड सेट करने के लिए की जरूरत: (गतिविधि घटक में प्रकट में यहाँ) android:windowSoftInputMode="stateVisible"

आशा इस मदद!

+4

यह गतिविधि शुरू होने पर कीबोर्ड को दिखाया गया था। – William

+0

बहुत बढ़िया :) उत्तरों का एक गुच्छा कोशिश की लेकिन केवल इसके साथ, मैं इसे काम कर सकता था :) बहुत बहुत धन्यवाद। – Srikanth

+0

मेरे लिए भी काम किया, धन्यवाद !! –

114

उपयोग:

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

5 से अधिक अन्य दृष्टिकोणों को आजमाने के बाद, यह केवल एकमात्र ऐसा था जो मेरे लिए काम करता था ('व्यू' सबक्लास से) – William

+9

यह सुझाव कुंजीपटल को तय करता है, भले ही फ़ील्ड फोकस खो देता है। – untill

+2

हाँ, यह मेरे लिए भी काम करता है, और 'imm.showSoftInput() 'काम नहीं करता है। –

26

यह मेरे लिए काम किया, करने के लिए कीबोर्ड ungalcrys

दिखाएँ धन्यवाद:

editText = (EditText)findViewById(R.id.myTextViewId); 
editText.requestFocus(); 
InputMethodManager imm = (InputMethodManager)getSystemService(this.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY); 

कुंजीपटल छुपाएं:

InputMethodManager imm = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); 
+2

एकमात्र पूर्ण समाधान। धन्यवाद। – korro

0

मैं ग इन उत्तरों में से कोई भी अपने काम पर काम नहीं कर सकता है। मेरे लिए समाधान के लिए उन्हें गठबंधन करने के लिए किया गया था:

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

मैं क्यों कि मेरे लिए जरूरी था यकीन नहीं है - डॉक्स ऐसा लगता है कि किसी भी विधि को अपने दम पर काम किया जाना चाहिए था के अनुसार।

14
final EditText tb = new EditText(this); 
tb.requestFocus(); 
tb.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     inputMethodManager.showSoftInput(tb, InputMethodManager.SHOW_IMPLICIT); 
    } 
}, 1000); 
+1

मुझे इसे रेज़्यूम() में दिखाने के लिए ऐसा करना था। देरी के बिना, इस धागे में वर्णित हर एक समाधान का उपयोग करके कुछ भी नहीं होगा। – Alex

+1

वहां है। यही वह जवाब था जिसे मैं ढूंढ रहा था। हालांकि, आपको पूरी तरह से दूसरी देरी की आवश्यकता नहीं है। मैंने केवल 150 मिलियन की कोशिश की, और यह भी ठीक काम किया। – Rubberduck

2

यहाँ कैसे दिखा और नरम कुंजीपटल को छिपाने के लिए एक kotlin विस्तार बनाया जा सकता है:

fun View.showKeyboard() { 
    this.requestFocus() 
    val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
    inputMethodManager.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT) 
} 

fun View.hideKeyboard() { 
    val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0) 
} 

तो फिर तुम सिर्फ इस कर सकते हैं:

editText.showKeyboard() 
// OR 
editText.hideKeyboard() 
1

यहाँ के लिए KeyboardHelper क्लास है छुपाएं और कीबोर्ड दिखाएं

import android.content.Context; 
import android.view.View; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.EditText; 

/** 
* Created by khanhamza on 06-Mar-17. 
*/ 

public class KeyboardHelper { 

    public static void hideSoftKeyboard(Context context, View view) { 
     if (context == null) { 
      return; 
     } 

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

    } 

    public static void hideSoftKeyboard(Context context, EditText editText) { 

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


    public static void openSoftKeyboard(Context context, EditText editText) { 
     InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 
    } 

}