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?


93
in Ihrem Manifest<activity android:windowSoftInputMode="stateHidden" ...>
idiottiger


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.


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.


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">

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 :)


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"
      >

11

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


9

Fügen Sie einfach in AndroidManifest.xml hinzu

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

8

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

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

Sie sind alle fertig.


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! ;-);


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();
}

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">

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)
}

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


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);

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);
}
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.