Tastiera su schermo Android che si apre automaticamente


140

Una delle mie app ha una "schermata di apertura" (fondamentalmente un menu) a cui EditTextseguono diverse Buttons. Il problema è che molti dei miei utenti stanno segnalando che quando aprono l'app si apre automaticamente la tastiera su schermo senza nemmeno toccare EditText. Per quanto ne so, tutti questi utenti utilizzano HTC Hero .

È un bug in 1.5? C'è qualcosa che posso fare al riguardo?


1
Se è un bug, probabilmente è nello Sprint Hero in particolare. Sprint ha una versione buggy di Android sugli Heros che vendono e non sembrano aver fretta di eliminare correzioni di bug per questo. Ci sono tonnellate di differenze nel comportamento tra Sprint Heros e tutti gli altri dispositivi Android. Per quanto ne so, le altre versioni di Hero, come quelle in Europa, non hanno questi problemi.
Marco B,

sfortunatamente gli Hero qui in Europa hanno grossi problemi, cambiano in base al numero di build ma abbiamo riscontrato 3-4 bug importanti.
Donal Rafferty,

Risposte:


279

È possibile utilizzare la seguente riga di codice nel metodo onCreate dell'attività per assicurarsi che la tastiera venga visualizzata solo quando un utente fa clic su un testo di modifica

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

Questo non funziona per me (2.2 MyTouch 3G). Nel mio metodo onCreate (), chiamo setSoftInputMode (). EditText causa ancora la visualizzazione della tastiera :(
Nate

Questo ha funzionato per me. Sto eseguendo Android 2.3.4 e sto sviluppando utilizzando <usi-sdk android: minSdkVersion = "3" />
Sandy

78
Oppure usa android:windowSoftInputMode="stateHidden"come qui
Swato,

Quindi ciò che mi confonde è che ho un'attività di accesso che sembra già nascondere bene la tastiera. Adesso ho fatto anche un'attività di registrazione, ma la tastiera è spuntata di default. Quindi, come fa il login a evitarlo? Non riesco a trovare setSoftInputMode nell'attività di accesso o l'attributo windowSoftInputMode in activity.xml.
Chucky

non funziona sempre: su alcuni dispositivi, SOFT_INPUT_STATE_ALWAYS_HIDDEN causa l'errore che un testo di modifica che non è l'ultimo attivo nell'attività non possa far apparire la tastiera virtuale. l'utilizzo di "android: windowSoftInputMode =" stateHidden "" nel manifest ha lo stesso effetto. i documenti dello sviluppatore affermano che la tastiera software non apparirà automaticamente a meno che non sia forzata, ma è semplicemente sbagliato.

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

Funziona con Android 3.0, 3.1, 3.2, 4.0 - Editor utilizzato per la compilazione (Eclipse 3.7)

Inserire 'windowSoftInputMode = "stateHidden"' nel file XML manifest dell'applicazione per OGNI attività in cui si desidera che la tastiera del software rimanga nascosta. Ciò significa che la tastiera non verrà visualizzata automaticamente e l'utente dovrà "fare clic" su un campo di testo per visualizzarlo. Ho cercato per quasi un'ora qualcosa che ha funzionato, quindi ho pensato di condividere.


La migliore soluzione che ho trovato finora. Mette a fuoco il campo senza aprire la tastiera. Funziona su Nexus S con 4.1.2
alexismorin il

1
android: windowSoftInputMode = "stateHidden | AdjustNothing" è utile anche se stai usando frammenti e non vuoi che la tastiera cambi il layout
whyoz

6

Aggiungi questo nel tuo AndroidManifest.xml :

android:windowSoftInputMode="stateHidden|adjustResize"

Funziona perfettamente. :)


1
Grazie per la risposta. Mi dispiace, come posso chiamare la tastiera adesso? Non verrà visualizzato quando si chiama requestFocus().
Takesi Tokugawa YD

6

Questo codice funzionerà su tutte le versioni di Android:

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

Più 1 per aver raccontato quali pop-up e quali non lo sono
Demon App Programmer,

4

Aggiungi questo nel layout principale dell'XML.

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

Assicura che il focus non sia sul editText all'avvio dell'attività.


3

È possibile utilizzare questo nel metodo onCreate () dell'attività

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

oppure incolla questo codice nei tag Activity in AndroidManifest.xml

android:windowSoftInputMode="stateVisible"

2
Penso che intendi "stateHidden" piuttosto che "stateVisible".
stevehs17,

2

Puoi aggiungere la singola riga di codice in Android Mainfest.xml sotto il tag attività

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

questo può aiutarti.


1

In quella versione di Android, quando una vista è gonfiata, lo stato attivo verrà impostato sul primo controllo attivabile per impostazione predefinita e, se non è presente alcuna tastiera fisica, verrà visualizzata la tastiera su schermo.

Per risolvere questo problema, impostare esplicitamente lo stato attivo da qualche altra parte. Se lo stato attivo è impostato su un valore diverso da un EditText, la tastiera su schermo non verrà visualizzata.

Hai provato a farlo eseguendo Android 1.5 nell'emulatore?


L'ho provato nell'emulatore (e l'ho fatto di nuovo per essere sicuro di non essere pazzo). Funziona "a destra" (significa che non appare una tastiera pop-up). Inoltre, quando ho scritto questo, il mio G1 era in esecuzione 1.5 e non ha funzionato in questo modo (quando la tastiera era "nascosta").
Jeremy Logan,

Scommetto ancora che ha qualcosa a che fare con il focus iniziale. Forse è qualcosa di specifico per HTC Hero, ma proverei a focalizzare esplicitamente l'attenzione su qualcos'altro e vedere se questo lo risolve per i tuoi utenti.
Marco B,

C'è un modo per concentrarsi sul "nulla"?
Jeremy Logan,

1
Questo non funziona per me (2.2 MyTouch 3G). Nel mio metodo onCreate (), chiamo esplicitamente requestFocus () su un pulsante, che è il secondo widget nella vista. EditText causa ancora la visualizzazione della tastiera :(
Nate

1

Puoi farlo a livello di programmazione

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

o impostare android:windowSoftInputMode="stateHidden"in <activity tagdentroAndroidManifest.xml


1

Includi questo dove le importazioni sono in cima:

import android.view.WindowManager;

Aggiungi questo codice sulla parte OnCreate:

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

0
InputMethodManager imm = (InputMethodManager)GetSystemService(Context.InputMethodService);
        imm.ShowSoftInput(_enterPin.FindFocus(), 0);

* Questo è per Android.xamarin e FindFocus () - cerca la vista nella gerarchia radicata in questa vista che attualmente ha lo stato attivo, poiché ho _enterPin.RequestFocus () prima del codice sopra, quindi mostra la tastiera per _enterPin EditText *

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.