2012-12-04 13 views
23

showSoftInput() zeigt nicht die Tastatur für mich, aber toggleSoftInput() tut. Ich habe einen anderen Post gesehen, der besagt, dass die harte Tastatur bei der Verwendung des Emulators deaktiviert werden soll, aber ich verwende keinen Emulator. Ich lade meine APK auf einem tatsächlichen Gerät ohne harte Tastatur. Sollten beide Methoden nicht funktionieren? Warum funktioniert showSoftInput() nicht? Ich möchte die Tastatur explizit einem bestimmten Textfeld zuordnen.android softkeyboard showSoftInput vs toggleSoftInput

funktioniert nicht:

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

Works:

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

Haben Sie das herausgefunden? Ich habe schon 3 Tage mit diesem Problem verbracht. Wenn ich versuche, toggle zu verwenden, wird die Tastatur manchmal ausgeblendet, da sie bereits sichtbar ist. Und natürlich denkt Android nicht, dass es notwendig ist, uns zu fragen, ob der Soft-Eingang sichtbar ist oder nicht. – bgolson

Antwort

1

Try this:

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

Wenn dies nicht das Tutorial von here lesen funktioniert

+1

Ich musste umschalten. Aus irgendeinem Grund funktionierte showSoftInput nicht für mich – prostock

+0

Das funktioniert perfekt für mich. Vielen Dank! –

17

Es scheint dass die Tastatur wird zunächst angezeigt, sondern durch etwas anderes verborgen, da die folgenden Werke (aber eigentlich eine schmutzige Arbeit-around ist):

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

Und als logcat Ich vermute die Ursache hinter dieser Nachricht verbirgt sich die Tastatur zunächst suchen gezeigt:

Zwischenablage Dialog am Start-Eingang ausblenden: fertig von jemand anderem ...!

+1

Das ist das Einzige, was mir geholfen hat, die Tastatur in onCreate programmatisch zu zeigen. Ich wünschte, ich wüsste warum. danke trotzdem .. –

+0

Ich hatte ähnliches Problem.Es wurde gelöst.Danke –

+0

Netter Trick, danke. – Lev

2

Die genaue Antwort auf diese Frage warum funktioniert showSoftInput nicht und toggleSoftInput tut?

Ist die Ansicht, zu der Sie versuchen, die Tastatur anzuzeigen, nicht den Fokus. So, dieses Problem zu lösen und die Methode verwenden showSoftInput Sie die folgenden Methoden auf Ihrer Ansicht rufen wird:

setFocusable(true); 
    setFocusableInTouchMode(true); 

die oben genannten Methoden aufrufen wird sicherstellen, dass, wenn Sie auf die Ansicht behält und Captures der Fokus.

+0

Die genaue Antwort sollte zumindest ein Beispiel zeigen ... weil es nicht funktioniert hat! –

4

anzeigen Keyboard + Fokus und auch, wenn Sie die Tastatur

@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); 
} 

P. S inputSearch = (EditText) getSherlockActivity(). FindViewById (R.id ausblenden möchten.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); 
} 

WORKS

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

FUNKTIONIERT NICHT

imm wird behandelt früher als ich ein Fragment so bin mit:

Declare imm in dem Fragment

private InputMethodManager imm; 

Dann im Fragment add:

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

Er sagt, nach 3 bis 4 Stunden der Forschung und Ausfälle! !

Danke user_CC! :-)

Phil

+0

FWIW, musste dies zweimal lesen, bevor ich sicher war, dass es das erste Code-Snippet war, das funktioniert - wäre klarer gewesen, wenn "WORKS:" ÜBER das erste Snippet und "DOES WORK:" ÜBER das zweite Snippet gesetzt wurde. – ToolmakerSteve

0

ShowSoftInput funktioniert, wenn die Zielansicht der imm mit dem editText gleich ist. Sie können dies durch imm.isActive(editText) oder editText.isInputMethodTarget() überprüfen.

ToggleSoftInput schaltet nur die Tastatur des aktuellen Ziels von imm um.

Die Zielansicht von imm wird eingestellt, nachdem der Fokus durch geändert wurde. Ich denke, einige Post-Prozesse existieren zwischen diesen beiden Aufgaben, da ein Post-Runnable nicht genug war. Ich testete Doppelpost und es funktionierte für mich.

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); 
       } 
      } 
     }); 
    } 
}); 
Verwandte Themen