So verstecken Sie die Soft-Tastatur, wenn die Aktivität beginnt


151

Ich habe einen Edittext mit android:windowSoftInputMode="stateVisible"in Manifest. Jetzt wird die Tastatur angezeigt, wenn ich die Aktivität starte. Wie verstecke ich es? Ich kann nicht verwenden, android:windowSoftInputMode="stateHiddenda die Tastatur sichtbar sein sollte, wenn die Tastatur sichtbar ist, die App minimieren und fortsetzen sollte. Ich habe es mit versucht

InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

aber es hat nicht funktioniert.

Antworten:


1

Wenn Sie XML nicht verwenden möchten, erstellen Sie eine Kotlin-Erweiterung, um die Tastatur auszublenden

// In onResume, call this
myView.hideKeyboard()

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

Alternativen basierend auf dem Anwendungsfall:

fun Fragment.hideKeyboard() {
    view?.let { activity?.hideKeyboard(it) }
}

fun Activity.hideKeyboard() {
    // Calls Context.hideKeyboard
    hideKeyboard(currentFocus ?: View(this))
}

fun Context.hideKeyboard(view: View) {
    view.hideKeyboard()
}

So zeigen Sie eine weiche Tastatur an

fun Context.showKeyboard() { // Or View.showKeyboard()
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}

Einfachere Methode bei gleichzeitiger Anforderung eines Fokus auf einen Edittext

myEdittext.focus()

fun View.focus() {
    requestFocus()
    showKeyboard()
}

Bonusvereinfachung:

Entfernen Sie die Anforderung für die Verwendung von getSystemService: Splitties Library

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)

361

In der AndroidManifest.xml:

<activity android:name="com.your.package.ActivityName"
          android:windowSoftInputMode="stateHidden"  />

oder Versuche

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)‌​;

Bitte überprüfen Sie dies auch


3
Vielen Dank für android:windowSoftInputMode="stateHidden"
Shylendra Madda

2
Tatsächlich gibt es auch eine gute Antwort darauf, wie man verhindern kann, sich auf den Bearbeitungstext zu konzentrieren. Stackoverflow.com/questions/4668210/…
Boris Treukhov

204

Verwenden Sie die folgenden Funktionen, um die Tastatur ein- oder auszublenden:

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}

4
Context.INPUT_METHOD_SERVICE für diejenigen, die in Fragmenten sind oder nicht in der Hauptaktivität usw. sind
Oliver Dixon

7
Sie können dies versuchen. Es funktioniert, wenn Sie es aus der Aktivität aufrufen. getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) ‌;
Sinan Dizdarević

Was ist, wenn wir dies innerhalb eines Hörers aufrufen müssen? Gefällt onFocusChange()
mir

44

Fügen Sie der übergeordneten Ansicht von editText einfach zwei Attribute hinzu.

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

36

Fügen Sie dies in das Manifest innerhalb des Activity-Tags ein

  android:windowSoftInputMode="stateHidden"  

oder android: windowSoftInputMode = "stateUnchanged" - Dies funktioniert wie folgt: Zeigen Sie es nicht an, wenn es nicht bereits angezeigt wird, aber wenn es beim Aufrufen der Aktivität geöffnet war, lassen Sie es geöffnet.
Sujeet Kumar Gupta

ya du bist richtig aber was ist, wenn sich die Ausrichtung ändert?
Saneesh

26

Versuche dies:

<activity
    ...
    android:windowSoftInputMode="stateHidden|adjustResize"
    ...
>

Schauen Sie sich diese für weitere Details an.


14

Um das Softkeyboard zum Zeitpunkt des Starts der neuen Aktivität oder usw. auszublenden onCreate(), onStart()können Sie den folgenden Code verwenden:

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

10

Verwenden von AndroidManifest.xml

<activity android:name=".YourActivityName"
      android:windowSoftInputMode="stateHidden"  
 />

Verwenden von Java

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

Verwenden Sie die oben genannte Lösung.

Fügen Sie Ihren EditText hinzu

<EditText
android:focusable="false" />

Fügen Sie auch den Listener Ihres EditText hinzu

youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    v.setFocusable(true);
    v.setFocusableInTouchMode(true);
    return false;
}});

7

Fügen Sie Ihrer XML-Datei den folgenden Text hinzu.

<!--Dummy layout that gain focus -->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical" >
            </LinearLayout>

6

Ich hoffe, das wird funktionieren, ich habe viele Methoden ausprobiert, aber diese hat für mich funktioniert fragments. Fügen Sie diese Zeile einfach in onCreateview / init ein.

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

5

Verwenden Sie den folgenden Code, um das Softkeyboard zum Zeitpunkt des Starts der neuen Aktivität oder der Methode onCreate (), onStart () usw. auszublenden:

getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);

Um das Softkeyboard zum Zeitpunkt der Schaltfläche auszublenden, klicken Sie auf Aktivität:

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

5

Verwenden Sie SOFT_INPUT_STATE_ALWAYS_HIDDEN anstelle von SOFT_INPUT_STATE_HIDDEN

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

5

Fügen Sie in Ihrer Aktivität in manifestiert diese Eigenschaft

android:windowSoftInputMode="stateHidden" 

4

Fügen Sie diesen Code in Ihre Java-Datei ein und übergeben Sie das Argument für das Objekt an edittext.

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

4

Sie können die Konfiguration auf AndroidManifest.xml festlegen

Beispiel:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>

4

Verwenden Sie den folgenden Code, um das Softkeyboard beim ersten Start der Aktivität zum ersten Mal auszublenden

getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);

3

Versuchen Sie dies auch

Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

3

Die obigen Antworten sind ebenfalls korrekt. Ich möchte nur kurz erläutern, dass es zwei Möglichkeiten gibt, die Tastatur beim Starten der Aktivität in manifest.xml auszublenden. z.B:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • Der obige Weg versteckt es immer, wenn Sie die Aktivität eingeben.

oder

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • Dieser sagt, ändere es nicht (z. B. zeige es nicht, wenn es nicht bereits angezeigt wird, aber wenn es beim Betreten der Aktivität geöffnet war, lass es offen).

2

Das habe ich getan:

yourEditText.setCursorVisible(false); //This code is used when you do not want the cursor to be visible at startup
        yourEditText.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);   // handle the event first
                InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {

                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  // hide the soft keyboard
                    yourEditText.setCursorVisible(true); //This is to display cursor when upon onTouch of Edittext
                }
                return true;
            }
        });

2

Wenn Ihre Anwendung auf Android API Level 21 oder höher abzielt, steht eine Standardmethode zur Verfügung.

editTextObj.setShowSoftInputOnFocus(false);

Stellen Sie sicher, dass Sie den folgenden Code im EditTextXML-Tag festgelegt haben.

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />

1

Versuche dies.

Zuerst werden in Ihrer durchsuchbaren XML die Felder (Name und Hinweis usw.) @stringund keine Literalzeichenfolgen eingefügt.

Dann onCreateOptionsMenumuss die Methode ein ComponentNameObjekt mit Ihrem Paketnamen und Ihrem vollständigen Klassennamen (mit Paketnamen) enthalten. - Falls die Aktivität mit der SearchViewKomponente mit der der Suchergebnisse übereinstimmtgetComponentName() , wie der Google Android-Entwickler sagt.

Ich habe viele Lösungen ausprobiert und nach viel Arbeit funktioniert diese Lösung für mich.


1
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

this one worked for me

1
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

es wird funktionieren


Während dieser Code die Frage möglicherweise beantwortet, verbessert die Bereitstellung eines zusätzlichen Kontexts darüber, warum und / oder wie dieser Code die Frage beantwortet, ihren langfristigen Wert.
Rollstuhlfahrer
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.