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.

Aju
quelle

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)
Gibolt
quelle
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

Neenu
quelle
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);
}
Sherif elKhatib
quelle
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"
Mani
quelle
36

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

  android:windowSoftInputMode="stateHidden"  
Saneesh
quelle
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.

Adnan
quelle
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);
Rana Pratap Singh
quelle
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;
}});
Atif Amin
quelle
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>
Treffer
quelle
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);
Mubashar
quelle
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);
    }
Adam
quelle
5

Verwenden Sie SOFT_INPUT_STATE_ALWAYS_HIDDEN anstelle von SOFT_INPUT_STATE_HIDDEN

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Brinda Rathod
quelle
5

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

android:windowSoftInputMode="stateHidden" 
yousef
quelle
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);
}
Najib Ahmed Puthawala
quelle
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"/>
Langer Nguyen
quelle
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);
Geeta Gupta
quelle
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
    }
});
ritesh4326
quelle
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).
Sujeet Kumar Gupta
quelle
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;
            }
        });
mangu23
quelle
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" />
Harpreet
quelle
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.

toktokwho
quelle
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
user3024334
quelle
1
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

es wird funktionieren


quelle
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