Verhindern Sie, dass die Tastatur beim Start der Aktivität angezeigt wird

265

Ich habe eine Aktivität mit einer Edit TextEingabe. Wenn die Aktivität initialisiert wird, wird die Android-Tastatur angezeigt. Wie kann die Tastatur ausgeblendet bleiben, bis der Benutzer die Eingabe fokussiert?

Fcoder
quelle
93
in Ihrem Manifest<activity android:windowSoftInputMode="stateHidden" ...>
idiottiger
1
Mögliches Duplikat der automatischen Android-Bildschirmtastatur
Caleb
1
Wie zusammen mit verwenden android:windowSoftInputMode="adjustPan"?
János
4
@ János android: windowSoftInputMode = "adjustPan | stateHidden"
Alexey Strakh
Die Antwort in diesem Kommentar war die Antwort, nach der ich suche: stackoverflow.com/a/23605510/6942602
korchix

Antworten:

436

Ich denke, das Folgende könnte funktionieren

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

Ich habe es schon einmal für so etwas benutzt.

Lucas
quelle
Gibt es eine Möglichkeit, es als reine Ziffern-Tastatur festzulegen? dh 12Key Tastatur?
Mohamed Khamis
@MohamedKhamis input.setRawInputType (Configuration.KEYBOARD_12KEY);
Blockwala
1
Ja, es funktioniert immer noch. @SagarNayak, warum sollten Sie Tastatur für verbergen EditText? :) Dies ist, um Tastatur zu verstecken, wenn Aktivität beginnt, die enthältEditText
Martynas
@ Devealte 7 Jahre später und es hat bei mir funktioniert, hast du es in onCreate platziert?
Dymas
@ Dymas Ja, und ich habe es gerade vor einigen Monaten behoben :)
Devealte
180

Versuchen Sie dies auch -

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

Andernfalls deklarieren Sie in der Aktivität Ihrer Manifestdatei -

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
          android:label="@string/app_name"
          android:windowSoftInputMode="stateHidden"
          >

Wenn Sie bereits android:windowSoftInputModeeinen Wert wie adjustResizeoder verwendet haben adjustPan, können Sie zwei Werte wie den folgenden kombinieren:

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

Dadurch wird die Tastatur bei Bedarf ausgeblendet, die Aktivitätsansicht jedoch geschwenkt, falls die Tastatur angezeigt werden muss.

Praveenkumar
quelle
3
Vielen Dank, dass Sie sowohl im Code als auch in XML anzeigen! Dies ist in der Tat die richtigste Antwort! Zumal es wahrscheinlich 3 Minuten waren, in denen Sie beide Methoden geschrieben haben, die Sie nicht zum ersten Mal gemacht haben ;-)
Eric
34

Blenden Sie es für alle Aktivitäten mit dem Thema aus

<style name="MyTheme" parent="Theme">
    <item name="android:windowSoftInputMode">stateHidden</item>
</style>

Setze das Thema

<application android:theme="@style/MyTheme">
Dira
quelle
wie dieser globale Ansatz.
Rm558
1
Dies funktionierte, als ich verschiedene Themen an verschiedenen Orten verwendete
nmxprime
22

Fügen Sie diese beiden Eigenschaften Ihrem übergeordneten Layout hinzu (z. B. Lineares Layout, Relatives Layout).

android:focusable="false"
android:focusableInTouchMode="false" 

Es wird den Trick machen :)

König der Massen
quelle
2
Dies funktioniert bei mir nicht, setzt sie jedoch truegemäß der Antwort von Jack T auf " Arbeiten". Gab es in den letzten Versionen eine Verhaltensänderung?
Protean
Zusätzlich zu meiner Antwort müssen Sie auch die anderen Eigenschaften überprüfen, die Sie im Manifest haben, und Text bearbeiten.
König der Massen
Ich habe nur die grundlegendsten Eigenschaften in ihnen. Ich verstehe nicht, warum das Setzen dieser Einstellungen falsefunktionieren sollte, da die Idee darin besteht, den Fokus von den EditText-Feldern wegzulenken.
Protean
Vielleicht wurde der Fokus früher von den EditText-Feldern entfernt, indem er vom übergeordneten Layout entfernt wurde? Aber anscheinend nicht mehr.
Protean
13

Versuchen Sie, es in der Menifest-Datei zu deklarieren

<activity android:name=".HomeActivity"
      android:label="@string/app_name"
      android:windowSoftInputMode="stateAlwaysHidden"
      >
androidify
quelle
11

Wenn Sie API Level 21 verwenden, können Sie editText.setShowSoftInputOnFocus (false) verwenden.

SaraVF
quelle
9

Fügen Sie einfach in AndroidManifest.xml hinzu

<activity android:name=".HomeActivity"  android:windowSoftInputMode="stateHidden">
</activity>
Dayanand Waghmare
quelle
8

Fügen Sie dies einfach in Ihre Datei manifest.xml ein

<activity android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden">

Sie sind alle fertig.

Androido
quelle
7

Sie können diese Codezeilen auch in das direkte übergeordnete Layout der XML-Layoutdatei schreiben, in der Sie das "Problem" haben:

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

Beispielsweise:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ...
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/myEditText"
        ...
        android:hint="@string/write_here" />

    <Button
        android:id="@+id/button_ok"
        ...
        android:text="@string/ok" />
</LinearLayout>


EDIT:

Beispiel, wenn der EditText in einem anderen Layout enthalten ist:

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ... >                                            <!--not here-->

    ...    <!--other elements-->

    <LinearLayout
        android:id="@+id/theDirectParent"
        ...
        android:focusable="true"
        android:focusableInTouchMode="true" >        <!--here-->

        <EditText
            android:id="@+id/myEditText"
            ...
            android:hint="@string/write_here" />

        <Button
            android:id="@+id/button_ok"
            ...
            android:text="@string/ok" />
    </LinearLayout>

</ConstraintLayout>

Der Schlüssel besteht darin, sicherzustellen, dass der EditText nicht direkt fokussierbar ist.
Tschüss! ;-);

Jack T.
quelle
6

Beste Lösung für mich, fügen Sie Ihre Klasse ein

@Override
public void onResume() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onResume();
}

@Override
public void onStart() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onStart();
}
Efe ÖZYER
quelle
3

Funktion zum Ausblenden der Tastatur.

public static void hideKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();

    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

Tastatur in der Datei AndroidManifext.xml ausblenden.

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">
Philip BH
quelle
3

Um die akzeptierte Antwort von @Lucas zu erweitern:

Nennen Sie dies aus Ihrer Aktivität in einem der frühen Lebenszyklusereignisse:

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

Kotlin Beispiel:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}
Trevor. Schrauben
quelle
2

Sie können dieses eindeutige Attribut für jedes Element ausprobieren

TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);

Die Tastatur wird nicht angezeigt, solange das Element scharfgestellt ist

Somwang Souksavatd
quelle
Dies könnte zwar die Frage des Autors beantworten, es fehlen jedoch einige erklärende Wörter und / oder Links zur Dokumentation. Rohcode-Schnipsel sind ohne einige Ausdrücke nicht sehr hilfreich. Möglicherweise ist es auch sehr hilfreich , eine gute Antwort zu schreiben . Bitte bearbeiten Sie Ihre Antwort - Aus der Bewertung
Nick
1
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
Yuliia Ashomok
quelle
0

Fügen Sie dies einfach zu Ihrer Aktivität hinzu:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
      if (getCurrentFocus() != null) {
           InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
      }
      return super.dispatchTouchEvent(ev);
}
haythem souissi
quelle