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.