Wie entferne ich das Autofokus- / Tastatur-Popup eines Feldes, wenn der Bildschirm angezeigt wird?

105

Ich habe einen Bildschirm, in dem das erste Feld ein EditText ist und der beim Start den Fokus erhält. Außerdem wird der numerische Eingabetyp angezeigt, was sehr ärgerlich ist

Wie kann ich sicherstellen, dass beim Starten der Aktivität der Fokus nicht erreicht und / oder das Eingabefeld nicht angehoben wird?

Pentium10
quelle

Antworten:

157
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

oder

Legen Sie die Aktivitätseigenschaft in der Manifestdatei wie unten im Anwendungs-Tag fest

android:windowSoftInputMode="stateHidden"
Mitul Nakum
quelle
Das Festlegen von android: windowSoftInputMode in der Datei AndroidManifest.xml kann mit anderen Werten ODER-verknüpft werden. Der Modus impliziert normalerweise einzelne Werte, aber in diesem Fall ist der Wert eine Sammlung von Flags. Beschreibung der Werte:Formats: flag Values: adjustNothing, adjustPan, adjustResize, adjustUnspecified, stateAlwaysHidden, stateAlwaysVisible, stateHidden, stateUnchanged, stateUnspecified, stateVisible Specify the default soft-input mode for the main window of this activity. A value besides "unspecified" here overrides any value in the theme.
Jeff Muir
145

Gehen Sie zu Ihrer Anwendungsmanifestdatei und schreiben Sie diese Zeile für die Aktivität, für die Sie das automatische Tastatur-Popup deaktivieren möchten.

android:windowSoftInputMode="stateHidden"
sm.euro
quelle
Hat bei mir nicht funktioniert. Ich habe es in activity_main.xml eingefügt. Dies funktionierte perfekt, als ich es in onCreate () einfügte. getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Glez
20

Damit die Tastatur nicht programmgesteuert angezeigt wird, das Standard-Widget jedoch weiterhin einen Fokusaufruf erhält:

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

im onResume()

danmux
quelle
11
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Rufen Sie die obige Methode in onCreate () auf. Sie verhindert, dass softKeyboard angezeigt wird , es sei denn, der Benutzer wählt EditText by austapping or clicking.

oder fügen Sie einfach das android:windowSoftInputMode="stateHidden"Aktivitätstag hinzuManifest.xml

Xar-e-ahmer Khan
quelle
10

Dies ist normalerweise ein Chaos. Das erste, was ich versuche, ist zu versuchen, den Fokus mit einer anderen Ansicht über zu stehlen. Sie müssen auch den fokussierbaren und fokussierbaren InTouchMode haben.

<TextView
  ...
  android:focusable="true"
  android:focusableInTouchMode="true">

    <requestFocus/>
</TextView>
urSus
quelle
Das funktioniert. Ich halte dies für einen saubereren Ansatz, aber es hängt auch davon ab, wie Ihre Bedingungen sind. Ich akzeptiere diesen.
JaydeepW
5

Lassen Sie eine andere Ansicht den Fokus erfassen. Standardmäßig wird die erste fokussierbare Ansicht fokussiert, wenn ein Layout aufgeblasen wird. Sie können die Fokussierung auf eine andere Ansicht über XML anfordern:

<TextView
    android:layout_width="wrap_parent"
    android:layout_height="wrap_content"
    android:text="Some other view">

    <requestFocus />
</TextView>

Dies funktioniert für jede Ansicht.

Wenn Sie es programmgesteuert tun möchten, können Sie verwenden view.requestFocus().

Jason Robinson
quelle
0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
Paul Liang
quelle
3
Willkommen bei StackOverflow! Dies ist nicht wie in anderen Foren. Wenn Sie Ihre Antwort ändern möchten, klicken Sie einfach auf den editLink und nehmen Sie Ihre Änderungen vor. Und bitte versuchen Sie, Ihren Code zu formatieren, indem Sie Ihren Code auswählen und die Schaltfläche Codebeispiel verwenden {}oder drücken Ctrl+K.
Peter Lang
0

Durch Hinzufügen android:windowSoftInputMode="stateHidden"zu Ihrer Aktivität im Manifest wird die Tastatur nur ausgeblendet, wenn Sie die Aktivität starten oder wie Google sagt

Wenn der Benutzer positiv zur Aktivität navigiert und nicht zurückkehrt, weil er eine andere Aktivität verlassen hat

Verwenden Sie die Option, um die Tastatur auch dann auszublenden, wenn der Benutzer die Zurück-Taste drückt und von einer anderen Aktivität zu Ihrer Aktivität zurückkehrt android:windowSoftInputMode="stateAlwaysHidden"

Devansh Maurya
quelle
-1

Ich habe dies nicht versucht und bin auch nicht in der Nähe meines Programmiercomputers, aber ich würde vermuten, dass das programmgesteuerte Senden eines Fokus an die übergeordnete Ansicht oder etwas Ähnliches den Trick tun könnte - das ist eher eine Problemumgehung als eine Lösung, kann es aber wiederum nicht einfach testen ein Gedanke

Ben
quelle
1
Ich habe das versucht, funktioniert aber nicht. Ich habe .requestFocus();einen Knopf gedrückt und immer noch die Tastatur Popups.
Pentium10
Gedanken können als Kommentare hinzugefügt werden
Alberto M