Automatisches Aufspringen der Tastatur beim Start Aktivität


97

Ich habe eine relativ einfache Frage. Ich habe eine Aktivität mit vielen EditText-Inhalten. Wenn ich die Aktivität öffne, wird automatisch auf den ersten EditText fokussiert und die virtuelle Tastatur angezeigt.

Wie kann ich das verhindern?


Überprüfen Sie meine Antwort auf diese Frage stackoverflow.com/questions/39593324/…
Android-Hilfe

Wenn Meine App gestartet (geöffnet) und die Textansicht zum Bearbeiten verfügbar ist, ist die Tastatur automatisch aktiviert (anzeigen). Wie Sie dieses Problem lösen können, klicken Sie hier easycomacademy.com/…
AhmadUllah Ahmad

Antworten:


209

Verwenden Sie diese Attribute in Ihrem Layout-Tag in einer XML-Datei:

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

Wie von anderen Mitgliedern in Kommentaren berichtet, funktioniert es nicht, ScrollViewdaher müssen Sie diese Attribute dem Hauptkind von hinzufügen ScrollView.


3
Dies hat auch mein Problem behoben. Ich habe dies dem RelativeLayout-Tag für meine Aktivität hinzugefügt. Danke dir!
Luke

21
Interessanterweise hat es nicht funktioniert, als ich das Obige zu einer ScrollView hinzugefügt habe, aber es hat für ein LinearLayout funktioniert
Jerry Brady

1
Ich denke, Sie müssen es auf das oberste Layout setzen
Utsav Gupta

Ich denke, das funktioniert, weil Sie dem Layout selbst sagen, dass es Fokus haben kann? Andernfalls wird davon ausgegangen, dass das erste Steuerelement im Formular im Mittelpunkt stehen muss. Seltsamerweise bekam ich die Tastatur, auch wenn alle Steuerelemente in meinem Formular deaktiviert waren. Jetzt behoben. Danke dir!
Crowmagnumb

1
Es ist wichtig zu beachten, dass diese Lösung Probleme mit der Barrierefreiheit verursacht (eine Ansicht, die nicht fokussierbar sein sollte, da sie als fokussiert markiert ist) und unbeabsichtigte Konsequenzen haben kann.
Renato

96

Sie können dies zu Ihrer Android Manifest-Aktivität hinzufügen:

android:windowSoftInputMode="stateHidden|adjustResize"

Dies funktioniert jedoch, wenn Sie einen Bildhintergrund haben und sich Sorgen machen, dass Ihre weiche Tastatur diesen Bildhintergrund verkleinert, verwenden Sieandroid:windowSoftInputMode="stateHidden|adjustPan"
ArtiomLK

31

Ich habe mehrere Implementierungen hier beschrieben, aber jetzt habe ich die AndroidManifest.xmlfür meine ActivityEigenschaft hinzugefügt :

android:windowSoftInputMode="stateAlwaysHidden"

Ich denke, das ist der einfache Weg, auch wenn Sie verwenden fragments.

" stateAlwaysHidden " Die Softtastatur wird immer ausgeblendet, wenn das Hauptfenster der Aktivität einen Eingabefokus hat.


Dies funktionierte für mich sowohl mit einem ScrollView als auch mit einem RelativeLayout.
iversoncru

Für Fragmente ist dies nicht besonders gut, da Sie den "verborgenen Status" mit der Aktivität verknüpfen, die alle Ihre Fragmente enthält. Dies bedeutet, dass jedes Fragment, das Sie in der Aktivität anzeigen möchten, von der Eigenschaft betroffen ist (nicht für ein "pro Fragment "Basis).
Pelpotronic

11

Wenn Sie eine andere Ansicht zu Ihrer Aktivität haben als a ListView, können Sie auch Folgendes tun:

ListView.requestFocus(); 

in Ihrem onResume (), um den Fokus von der zu erhalten editText.

Ich weiß, dass diese Frage beantwortet wurde, aber nur eine alternative Lösung bietet, die für mich funktioniert hat :)


5

https://stackoverflow.com/a/11627976/5217837 Dies ist fast richtig:

@Override
public void onCreate(Bundle savedInstanceState) {

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

}

Es sollte jedoch SOFT_INPUT_STATE_HIDDEN und nicht SOFT_INPUT_STATE_ALWAYS_VISIBLE sein


4

Verwenden Sie dies im Code Ihrer Aktivität:

@Override
public void onCreate(Bundle savedInstanceState) {

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

}

Dies hat bei mir nicht funktioniert - die Tastatur tauchte immer noch auf, als ich meine Aktivität startete.
David Doria

Sie können diesen Link überprüfen. Es wird funktionieren: stackoverflow.com/questions/18977187/…
Sujeet Kumar Gupta

3

Ich hatte ein ähnliches Problem, selbst wenn ich zwischen den Registerkarten wechselte, tauchte die Tastatur automatisch auf und blieb mit Android 3.2.1 auf einem Tablet auf. Verwenden Sie die folgende Methode:

public void setEditTextFocus(EditText searchEditText, boolean isFocused)
{
    searchEditText.setCursorVisible(isFocused);
    searchEditText.setFocusable(isFocused);
    searchEditText.setFocusableInTouchMode(isFocused);
    if (isFocused) {
        searchEditText.requestFocus();
    } else {
        InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
        inputManager.hideSoftInputFromWindow(searchEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
    }
}   

In onCreate () und onPause () der Aktivität für jeden EditText:

setEditTextFocus (myEditText, false);

Für jeden EditText einen OnTouchListener:

    myEditText.setOnTouchListener(new EditText.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            setEditTextFocus(myEditText, true); 
            return false;
        }
    });

Für jeden EditTextin der OnEditorActionListener:

    myEditText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
                            .......
            setEditTextFocus(myEditText, false); 
            return false;
        }
    });

Und für jeden EditTextin der layout xml:

            android:imeOptions="actionDone"
            android:inputType="numberDecimal|numberSigned" // Or something else

Es ist wahrscheinlich mehr Codeoptimierung möglich.


3
((InputMethodManager)getActivity().getSystemService("input_method")).hideSoftInputFromWindow(this.edittxt.getWindowToken(), 0);

Verwenden von Fragment ..dieser Code funktioniert, um die Tastatur auszublenden ... Wenn ein Fragment geöffnet ist, vermeiden Sie den Fokus auf die Edittext-Feldtastatur ...
Sreelal S

2

Ich habe diese einfache Lösung gefunden, die für mich funktioniert hat. Legen Sie diese Attribute in Ihrem übergeordneten Layout fest:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainLayout"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true" >

Und jetzt, wenn die Aktivität beginnt, wird dieses Hauptlayout standardmäßig fokussiert.

Außerdem können wir den Fokus zur Laufzeit aus den untergeordneten Ansichten entfernen, indem wir den Fokus erneut auf das Hauptlayout legen, wie folgt:

findViewById(R.id.mainLayout).requestFocus();

Hoffe es wird für dich funktionieren.


1

Dies ist die Lösung, die ich verwende. Sie ist nicht die beste Lösung, aber sie funktioniert gut für mich

 editComment.setFocusableInTouchMode(false);
 editComment.setOnTouchListener(new OnTouchListener(){

                @Override
                public boolean onTouch(View v, MotionEvent event)
                {
                    // TODO Auto-generated method stub
                    editComment.setFocusableInTouchMode(true);
                     editComment.requestFocus() ;
                    return false;
                }});

1

Interessanterweise ist diese Dokumentation https://developer.android.com/training/keyboard-input/visibility.html , dass beim einer Aktivität und beim Fokussieren auf ein Textfeld die Softtastatur nicht angezeigt wird (und dann weitergeht) zeigen Ihnen, wie Sie die Tastatur anzeigen lassen können, wenn Sie Code verwenden möchten).

Auf meinem Samsung Galaxy S5 funktioniert meine App (ohne Manifesteintrag oder spezifischen Code) so - ohne Softtastatur. Auf einer Lollipop AVD wird jedoch eine Softtastatur angezeigt, die gegen das oben angegebene Dokument verstößt.

Wenn dieses Verhalten beim Testen in einer AVD auftritt, möchten Sie möglicherweise auf einem realen Gerät testen, um zu sehen, was passiert.


1

Dies hat einige gute Antworten im folgenden Beitrag: Verhindern Sie, dass EditText beim Start der Aktivität den Fokus erhält . Ich verwende regelmäßig den folgenden Code von Morgan :

<!-- Dummy item to prevent AutoCompleteTextView from receiving focus -->
<LinearLayout
    android:focusable="true" 
    android:focusableInTouchMode="true"
    android:layout_width="0px" 
    android:layout_height="0px"/>

<!-- :nextFocusUp and :nextFocusLeft have been set to the id of this component
to prevent the dummy from receiving focus again -->
<AutoCompleteTextView android:id="@+id/autotext"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:nextFocusUp="@id/autotext"     
    android:nextFocusLeft="@id/autotext"/>

HINWEIS : Das Dummy-Objekt muss direkt vor dem fokussierbaren Element platziert werden.

Und ich denke, es sollte auch mit ScrollView perfekt funktionieren und hatte auch hier keine Probleme mit der Barrierefreiheit.


0

Dies tritt auf, wenn Ihr EditText automatisch den Fokus erhält, wie wenn Ihre Aktivität beginnt. Eine einfache und stabile Möglichkeit, dies zu beheben, besteht darin, den anfänglichen Fokus auf eine andere Ansicht wie eine Schaltfläche usw. zu setzen.

Sie können dies in Ihrem Layout-XML tun, ohne dass Code erforderlich ist.


0

Akzeptierte Antwort funktioniert bei mir nicht, deshalb geben Antwort Antwort funktionierende Lösung, vielleicht ist es hilfreich!

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

Jetzt ist die Tastatur geöffnet, viel Spaß :)


Die Frage war, wie das Öffnen der Tastatur verhindert werden kann .
jk7

0

android: windowSoftInputMode = "stateHidden | adjustResize"

Funktioniert gut


0

Fügen Sie den folgenden Code oben im Aktivitäts-XML hinzu und stellen Sie sicher, dass sich die Ansicht über EditText befindet

<View 
android:layout_width="0dp"
android:layout_height="0dp"
android:focusableInTouchMode="true"/>

0

android:focusableInTouchMode="true"

Fügen Sie die obige Zeile zu xml von EditTextoder hinzu, TextInputLayoutdas den Fokus hat und das verursachtsoftInputKeyboard angezeigt wird.

Dies hat das Problem für uns gelöst und jetzt erscheint die Tastatur nicht mehr


0

search_edit_text = (EditText) findViewById (R.id.search_edit_text);

    search_edit_text.requestFocus();
    search_edit_text.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN , 0, 0, 0));
    search_edit_text.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));

Dies funktioniert für mich Jungs Fragment kann eine andere Syntax haben. DAS FUNKTIONIERT FÜR AKTIVITÄT


Sie müssen in Ihrer Antwort alle Einschränkungen, Annahmen oder Vereinfachungen angeben. Weitere Informationen zur Beantwortung finden Sie unter diesem Link: stackoverflow.com/help/how-to-answer
Usama Abdulrehman

-1

Wenn Ihre Ansicht über EditText und Listenansicht verfügt, wird die Tastatur standardmäßig geöffnet. Gehen Sie wie folgt vor, um zu verhindern, dass die Tastatur standardmäßig angezeigt wird

this.listView.requestFocus();

Stellen Sie sicher, dass Sie den Fokus auf die Listenansicht anfordern, nachdem Sie die Ansicht für editText erhalten haben.

Zum Beispiel

this.listView = (ListView) this.findViewById(R.id.list);
this.editTextSearch = (EditText) this.findViewById(R.id.editTextSearch);
this.listView.requestFocus();

Wenn Sie dies tun, wird editText fokussiert und die Tastatur wird eingeblendet.


Ich habe das getan, aber die Tastatur erscheint immer noch und der Fokus liegt auf dem editText.
David Doria
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.