Android-Bildschirmtastatur wird automatisch angezeigt

140

Eine meiner Apps hat einen "Startbildschirm" (im Grunde ein Menü), EditTextdem mehrere Buttons folgen . Das Problem ist, dass einige meiner Benutzer berichten, dass beim Öffnen der App automatisch die Bildschirmtastatur angezeigt wird, ohne dass sie die berühren EditText. Soweit ich das beurteilen kann, verwenden alle diese Benutzer das HTC Hero .

Ist das ein Fehler in 1.5? Kann ich etwas dagegen tun?

Jeremy Logan
quelle
1
Wenn es ein Fehler ist, ist es wahrscheinlich speziell im Sprint Hero. Sprint hat eine fehlerhafte Version von Android auf den Heros, die sie verkaufen, und sie scheinen es nicht eilig zu haben, Bugfixes dafür herauszubringen. Es gibt unzählige Verhaltensunterschiede zwischen dem Sprint Heros und allen anderen Android-Geräten. Soweit ich weiß, haben die anderen Versionen des Helden, wie die in Europa, diese Probleme nicht.
Mark B
Leider haben die Helden hier in Europa große Probleme, sie ändern sich je nach Build-Nummer, aber wir sind auf 3 - 4 große Fehler gestoßen.
Donal Rafferty

Antworten:

279

Sie können die folgende Codezeile in der onCreate-Methode der Aktivität verwenden, um sicherzustellen, dass die Tastatur nur angezeigt wird, wenn ein Benutzer auf einen EditText klickt

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
Donal Rafferty
quelle
Dies funktioniert bei mir nicht (2.2 MyTouch 3G). In meiner onCreate () -Methode rufe ich setSoftInputMode () auf. Der EditText bewirkt immer noch, dass die Tastatur Folgendes anzeigt :(
Nate
Das hat bei mir funktioniert. Ich verwende Android 2.3.4 und entwickle mit <used-sdk android: minSdkVersion = "3" />
Sandy
78
Oder verwenden Sie android:windowSoftInputMode="stateHidden"wie hier
Swato
Was mich also verwirrt, ist, dass ich eine Anmeldeaktivität habe, die die Tastatur anscheinend schon gut versteckt. Ich habe jetzt auch eine Registrierungsaktivität durchgeführt, aber die Tastatur wird standardmäßig angezeigt. Wie vermeidet der Login dies? Ich kann den setSoftInputMode in der Anmeldeaktivität oder das windowSoftInputMode-Attribut in der activity.xml nicht finden.
Chucky
funktioniert nicht immer: Auf einigen Geräten verursacht SOFT_INPUT_STATE_ALWAYS_HIDDEN den Fehler, dass ein Bearbeitungstext, der nicht der letzte in der Aktivität ist, nicht dazu führen kann, dass die Softtastatur angezeigt wird. Die Verwendung von "android: windowSoftInputMode =" stateHidden "" im Manifest hat ebenfalls den gleichen Effekt. In den Entwicklerdokumenten heißt es, dass die Softtastatur nur dann automatisch angezeigt wird, wenn dies erzwungen wird. Dies ist jedoch einfach falsch.
85
<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".Main"
              android:label="@string/app_name"
              android:windowSoftInputMode="stateHidden"
              >

Dies funktioniert für Android 3.0, 3.1, 3.2, 4.0 - Editor zum Kompilieren (Eclipse 3.7)

Platzieren Sie das 'windowSoftInputMode = "stateHidden"' in der Manifest-XML-Datei Ihrer Anwendung für JEDE Aktivität, in der die Softwaretastatur verborgen bleiben soll. Dies bedeutet, dass die Tastatur nicht automatisch aufgerufen wird und der Benutzer auf eine klicken muss Textfeld, um es aufzurufen. Ich suchte fast eine Stunde lang nach etwas, das funktionierte, also dachte ich, ich würde es teilen.

mourngrym1969
quelle
Beste Lösung, die ich bisher gefunden habe. Fokussiert das Feld, ohne die Tastatur zu öffnen. Arbeitet auf Nexus S mit 4.1.2
Alexismorin
1
android: windowSoftInputMode = "stateHidden | adjustNothing" ist auch hilfreich, wenn Sie Fragmente verwenden und nicht möchten, dass die Tastatur das Layout
ändert
6

Fügen Sie dies in Ihre AndroidManifest.xml ein :

android:windowSoftInputMode="stateHidden|adjustResize"

Es funktioniert perfekt. :) :)

Arun
quelle
1
Danke für die Antwort. Es tut mir leid, wie kann ich jetzt die Tastatur anrufen? Es wird beim Anruf nicht angezeigt requestFocus().
Takesi Tokugawa YD
6

Dieser Code funktioniert auf allen Android-Versionen:

@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_login);

 //Automatic popping up keyboard on start Activity

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

 or

 //avoid automatically appear android keyboard when activity start
     getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
 }
Satheeshkumar Somu
quelle
Plus 1, um zu sagen, welche auftaucht und welche nicht
Demon App Programmer
4

Fügen Sie dies im übergeordneten Layout des XML hinzu.

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

Es stellt sicher, dass der Fokus nicht auf dem editText liegt, wenn die Aktivität beginnt.

Ben
quelle
3

Sie können dies entweder in der onCreate () -Methode der Aktivität verwenden

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

oder fügen Sie diesen Code in die Activity-Tags in AndroidManifest.xml ein

android:windowSoftInputMode="stateVisible"
Sommer
quelle
2
Ich denke du meinst eher "stateHidden" als "stateVisible".
stevehs17
2

Sie können die einzelne Codezeile in Android Mainfest.xml unter dem Aktivitäts-Tag hinzufügen

 <activity
        android:name="com.sams.MainActivity"
        android:windowSoftInputMode="stateVisible" >
 </activity>

das kann dir helfen.

Mohanraj SK
quelle
1

Wenn in dieser Android-Version eine Ansicht aufgeblasen wird, wird der Fokus standardmäßig auf das erste fokussierbare Steuerelement gesetzt. Wenn keine physische Tastatur vorhanden ist, wird die Bildschirmtastatur angezeigt.

Um dies zu beheben, setzen Sie den Fokus explizit an einer anderen Stelle. Wenn der Fokus nicht auf einen EditText eingestellt ist, wird die Bildschirmtastatur nicht angezeigt.

Haben Sie versucht, dies zu testen, indem Sie Android 1.5 im Emulator ausführen?

dmazzoni
quelle
Ich habe es im Emulator versucht (und es einfach noch einmal gemacht, um sicherzugehen, dass ich nicht verrückt bin). Es wirkt "richtig" (dh kein Tastatur-Popup). Als ich das ursprünglich schrieb, lief auf meinem G1 1.5 und es hat sich nicht so verhalten (als die Tastatur "versteckt" war).
Jeremy Logan
Ich wette immer noch, dass es etwas mit dem anfänglichen Fokus zu tun hat. Vielleicht ist es etwas Spezielles für das HTC Hero, aber ich würde versuchen, den Fokus explizit auf etwas anderes zu setzen und zu prüfen, ob dies für Ihre Benutzer behoben ist.
Mark B
Gibt es eine Möglichkeit, "nichts" zu fokussieren?
Jeremy Logan
1
Dies funktioniert bei mir nicht (2.2 MyTouch 3G). In meiner onCreate () -Methode rufe ich requestFocus () explizit für eine Schaltfläche auf, die das zweite Widget in der Ansicht ist. Der EditText bewirkt immer noch, dass die Tastatur Folgendes anzeigt :(
Nate
1

Sie können es programmgesteuert wie machen

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

oder ein Satz android:windowSoftInputMode="stateHidden"in im <activity tagInnernAndroidManifest.xml

Xar-e-ahmer Khan
quelle
0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

* Dies ist für Android.xamarin und FindFocus () - es sucht nach der Ansicht in einer Hierarchie, die in dieser Ansicht verwurzelt ist und derzeit den Fokus hat, da ich _enterPin.RequestFocus () vor dem obigen Code habe, daher wird die Tastatur für _enterPin EditText angezeigt *

Ruchira
quelle
0

Fügen Sie dies dort ein, wo die Importe oben sind:

import android.view.WindowManager;

Fügen Sie diesen Code im OnCreate-Teil hinzu:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ....
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
Mike Zriel
quelle