2012-12-04 13 views
23

showSoftInput() मेरे लिए कीबोर्ड नहीं दिखाता है, लेकिन toggleSoftInput() करता है। मैंने कुछ अन्य पोस्ट देखा जो एम्यूलेटर का उपयोग करते समय हार्ड कीबोर्ड को अक्षम करने के लिए कहा, लेकिन मैं एक एमुलेटर का उपयोग नहीं कर रहा हूं। मैं अपने एपीके को किसी वास्तविक डिवाइस पर लोड नहीं कर रहा हूं जिसमें कोई हार्ड कीबोर्ड नहीं है। क्या दोनों विधियां काम नहीं करनी चाहिए? showSoftInput() क्यों काम नहीं करता है? मैं स्पष्ट रूप से कीबोर्ड को एक विशिष्ट टेक्स्ट फ़ील्ड से जोड़ना चाहता हूं।एंड्रॉइड सॉफ्टकीबोर्ड शो सॉफ़्ट इनपुट बनाम टॉगल सॉफ़्ट इनपुट

काम करता है नहीं:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
editText.setText("textchange"); //i see the text field update 
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED); 

काम करता है:

InputMethodManager imm = (InputMethodManager) getDelegate().getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); 
+0

क्या आपने इसे समझ लिया है? मैंने पहले से ही इस समस्या पर 3 दिन बिताए हैं। अगर मैं टॉगल का उपयोग करने का प्रयास करता हूं, तो कीबोर्ड कभी-कभी छिपा होगा, क्योंकि यह पहले से ही दिखाई दे रहा है। और निश्चित रूप से एंड्रॉइड नहीं सोचता है कि हमें यह पूछने की क्षमता देना आवश्यक है कि सॉफ्टनपुट दिखाई दे रहा है या नहीं। – bgolson

उत्तर

1

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

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

इस ट्यूटोरियल पढ़ा काम नहीं करता है here

+1

मुझे टॉगल करना पड़ा। किसी कारण से showSoftInput मेरे लिए काम नहीं करता – prostock

+0

यह मेरे लिए पूरी तरह से काम करता है। धन्यवाद! –

17

से ऐसा लगता है कुंजीपटल शुरू में दिखाया गया है लेकिन, कुछ और से छिपा हुआ है क्योंकि निम्न काम करता है (लेकिन वास्तव में एक गंदा काम के आसपास है) है कि:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
editText.postDelayed(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     editText.requestFocus(); 
     imm.showSoftInput(editText, 0); 
    } 
}, 100); 

और जब logcat को देखकर मुझे लगता है इस संदेश के पीछे कारण शुरू में छुपाता कुंजीपटल दिखाया गया:

प्रारंभ इनपुट पर क्लिपबोर्ड संवाद छुपाएं: किसी और द्वारा समाप्त ...!

+1

यह वास्तव में एकमात्र चीज है जो कीबोर्ड पर प्रोग्रामेटिक रूप से कीबोर्ड दिखाने की कोशिश करते समय मेरे लिए काम करती है। काश मैं जानता हूँ क्यों। वैसे भी धन्यवाद .. –

+0

मुझे भी इसी तरह की समस्या थी। इसे हल किया गया था। धन्यवाद –

+0

अच्छा चाल, धन्यवाद। – Lev

2

इस सवाल का सटीक उत्तर क्यों showSoftInput काम नहीं करता है और टॉगल सॉफ़्ट इनपुट करता है?

क्या वह दृश्य है जिसे आप कीबोर्ड प्रदर्शित करने का प्रयास कर रहे हैं, पर ध्यान केंद्रित नहीं है। तो इस समस्या को हल करने के लिए और विधि showSoftInput उपयोग करने के लिए आप होगा अपने दृश्य पर तरीकों के लिए निम्न कॉल करने के लिए:

setFocusable(true); 
    setFocusableInTouchMode(true); 

उपरोक्त विधियों कॉलिंग सुनिश्चित करें कि आप देखें पर क्लिक जब बरकरार रखे हुए है और कैप्चर कर देगा केन्द्र बिन्दु।

+0

सटीक उत्तर कम से कम एक उदाहरण दिखाना चाहिए ... क्योंकि यह काम नहीं करता है! –

4

कीबोर्ड दिखाएं + फोकस और यदि आप कुंजीपटल

@Override 
public void onResume() { 
    super.onResume(); 

    inputSearch.setFocusableInTouchMode(true); 
    inputSearch.requestFocus(); 

    // Show Keyboard 
    InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService(
      Context.INPUT_METHOD_SERVICE); 
    imm.showSoftInput(inputSearch, InputMethodManager.SHOW_IMPLICIT); 
} 

पी.एस inputSearch = (EditText) getSherlockActivity()। FindViewById (R.id छिपाने के लिए चाहते हैं।inputSearch); जब डिवाइस एक कठिन (स्लाइड-आउट) है

// Hide Keyboard 
InputMethodManager imm = (InputMethodManager) getSherlockActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(inputSearch.getWindowToken(), 0); 
1
public void hideKeyboard() { 
    myTextView.setFocusable(true); 
    myTextView.setFocusableInTouchMode(true); 
    imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0); 
} 

काम करता है

public void hideKeyboard() { 
    imm.hideSoftInputFromWindow(myTextView.getWindowToken(), 0); 
} 

काम नहीं करता है

इम से निपटाया जाता है टुकड़ा

private InputMethodManager imm; 
टुकड़ा जोड़ने में

तब में

प्रचार IMM: पहले मैं बहुत एक टुकड़ा का उपयोग कर के रूप में कर रहा हूँ

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    imm = (InputMethodManager) 
    getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 
} 

वे कहते हैं अनुसंधान और विफलताओं के 3 से 4 घंटे के बाद! !

धन्यवाद उपयोगकर्ता_सीसी! :-)

फिल

+0

एफडब्ल्यूआईडब्लू, मुझे यह सुनिश्चित करने से पहले दो बार पढ़ना पड़ा था कि यह पहला कोड स्निपेट था जो काम करता है - अगर "स्नैक्स:" रखे तो पहले स्निपेट के ऊपर "और काम नहीं करता": दूसरा स्निपेट से ऊपर स्पष्ट होता। – ToolmakerSteve

0

ShowSoftInput अगर IMM के लक्ष्य को देखते editText के साथ एक ही है काम करता है। आप इसे imm.isActive(editText) या editText.isInputMethodTarget() द्वारा देख सकते हैं।

ToggleSoftInput केवल imm के वर्तमान लक्ष्य के कीबोर्ड को टॉगल कर रहा है।

editText.requestFocus() द्वारा फोकस को बदलने के बाद इम का लक्ष्य दृश्य सेट किया गया है। मुझे लगता है कि इन दो कार्यों के बीच कुछ पोस्ट प्रक्रियाएं मौजूद हैं क्योंकि एक पोस्ट रननेबल पर्याप्त नहीं था। मैंने डबल पोस्ट का परीक्षण किया और यह मेरे लिए काम किया।

editText.requestFocus(); 
editText.post(new Runnable() { 
    @Override 
    public void run() { 
     editText.post(new Runnable() { 
      @Override 
      public void run() { 
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       if (imm != null) { 
        imm.showSoftInput(editText, 0); 
       } 
      } 
     }); 
    } 
}); 
संबंधित मुद्दे