2013-07-11 12 views
12

Ich habe eine EditText und eine Button. Mit einem Klick auf die Schaltfläche möchte ich die EditText Tastatur öffnen und gleichzeitig Fokus auf die EditText anfordern, damit der Benutzer direkt mit der Eingabe der Tastatur beginnt und der Text in der EditText erscheint. Aber in meinem Fall, wenn ich auf den Knopf klicke, öffne es die Tastatur, aber es setzt Fokus nicht auf EditText, wegen dem Benutzer auf den EditText wieder klicken muss, um darauf zu schreiben. Was ist das Problem. Jede Hilfe oder Anregung.EditText Anfrage Fokus funktioniert nicht

-Code Auf Schaltfläche anklickt

m_SearchEditText.requestFocus(); 
InputMethodManager inputMethodManager=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
inputMethodManager.toggleSoftInputFromWindow(m_SearchEditText.getApplicationWindowToken(), InputMethodManager.SHOW_FORCED, 0); 
+0

http://stackoverflow.com/questions/14327412/set-focus-on-edittext –

+0

irgendwann könnte dies sein, Schwerpunkt liegt auf der editText bereits und Sie versuchen, erneut zu setzen zu konzentrieren, so Der Bearbeitungscursor bewegt sich nicht zum gewünschten editText. Lösung: Fokus entfernen und Fokus erneut anfordern –

Antwort

3

Die folgenden Werke für mich und helfen sollte:

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

In Ihrem manifest.xml schreiben:

<activity android:name=".MainActivity" 
android:label="@string/app_name" 
android:windowSoftInputMode="stateAlwaysVisible" /> 

Und rufen Sie m_SearchEditText.requestfocus() in oncreate().
OR,
Versuchen:

if(m_SearchEditText.requestFocus()) { 
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
} 
21

sicherzustellen, dass die EditText im Touchbetrieb fokussierbar ist. Du kannst es auf zwei Arten machen.

In xml:

android:focusableInTouchMode="true" 

in Java:

view.setFocusableInTouchMode(true); 

Persönlich vertraue ich nicht über die XML-Definition dieser param. Ich bitte immer Fokus von diesen beiden Codezeilen:

view.setFocusableInTouchMode(true); 
view.requestFocus(); 

Die Tastatur selbst ohne die Notwendigkeit erscheinen shoul InputMethodManager zu nennen.

Es funktioniert in den meisten Fällen. Sobald es für mich nicht funktionierte, weil ich den Verweis auf das Objekt aufgrund recht aufwändiger Verarbeitung verloren habe - stellen Sie sicher, dass dies nicht Ihr Problem ist.

+0

Ich habe das gleiche Problem und das hat nicht für mich funktioniert. Dieses Problem ist ein allgemeines Problem scheinbar ohne eine gemeinsame Lösung. Ich habe mehrere Hacks ausprobiert und nichts scheint für meine Situation zu funktionieren. – BitsEvolved

+0

Überrascht, das hat nicht mehr upvotes. Ich habe den ganzen Tag über StackOverflow gesucht und dies war der einzige, der die EditText-Ansicht so eingestellt hat, dass sie sich auf das Laden meiner Aktivität fokussieren kann. Jetzt muss ich nur herausfinden, wie die Tastatur nicht laden, es sei denn, der Benutzer klickt mit dieser Lösung auf die Tastatur. –

+0

Eine solche unterwählbare Antwort, aber ein GEM! Lief wie am Schnürchen! – sud007

9

In meinem Fall funktionierte es, indem Sie einen Handler hinzufügten, nachdem Sie auf Knopf geklickt und Fokus in einer anderen Ansicht gesetzt hatten, der Fokus kann zurück zu Ihrer benötigten Ansicht gelangen.

setzen dies nur in Ihrem Code:

final Handler handler = new Handler(); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         lastview.getEditText().clearFocus(); 
         m_SearchEditText.requestFocus(); 
         InputMethodManager mgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 


         mgr.showSoftInput(mLastNameET, InputMethodManager.SHOW_IMPLICIT); 

        } 
       }, 100); 

Ich hoffe, es war hilfreich

+0

das funktioniert !! obwohl Sie die Verzögerung besser auf 0 – Irshu

1

U brauchen zwei XML-Attribute auch dies zu erreichen:

android:focusable="true" 
android:focusableInTouchMode="true" 

Fügen Sie sie dem EditText als sowie die übergeordneten Layouts (jedes Layout, in dem diese Ansichten sind). Standardmäßig sind diese Werte falsch, sodass die angeforderte Ansicht nicht im Fokus steht.

Quelle: https://developer.android.com/reference/android/view/View.html#attr_android:focusable

Nach u die EditText auf der Grundlage der Checkbox Auswahl zeigen, die nächsten und vorherigen Fokuspunkten dynamisch in Code hinzufügen.

Hoffe, das hilft.

+0

einstellen, funktioniert das auch nicht –

1

Als eine Erweiterung zu this answer (ich habe es nicht als Kommentar wegen des Rufes hinzugefügt ...).

Wenn Sie die verzögerte Zeit auf Null reduzieren möchten, verwenden Sie stattdessen handler.post(). Voll Code:

final Handler handler = new Handler(); 
handler.post(new Runnable() { 
    @Override 
    public void run() { 
     lastview.getEditText().clearFocus(); 
     m_SearchEditText.requestFocus(); 
     InputMethodManager mgr = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); 


     mgr.showSoftInput(mLastNameET, InputMethodManager.SHOW_IMPLICIT); 
    } 
});