Klawiatura ekranowa Androida automatycznie pojawia się


140

Jedna z moich aplikacji ma „ekran otwierający” (w zasadzie menu), EditTextpo którym następuje kilka Buttonsekund. Problem polega na tym, że kilku moich użytkowników zgłasza, że ​​po otwarciu aplikacji automatycznie pojawia się klawiatura ekranowa, nawet bez dotykania EditText. O ile wiem, wszyscy ci użytkownicy używają HTC Hero .

Czy to błąd w wersji 1.5? Czy jest coś, co mogę z tym zrobić?


1
Jeśli jest to błąd, prawdopodobnie dotyczy to zwłaszcza bohatera sprintu. Sprint ma wadliwą wersję Androida w sprzedawanych przez siebie Herosach i wydaje się, że nie spieszy im się z wypuszczaniem poprawek. Istnieje mnóstwo różnic w zachowaniu między Sprint Heros a wszystkimi innymi urządzeniami z Androidem. O ile wiem, inne wersje Bohatera, takie jak te w Europie, nie mają tych problemów.
Mark B

Niestety, Bohaterowie tutaj w Europie mają poważne problemy, zmieniają się w zależności od numeru kompilacji, ale natknęliśmy się na 3-4 główne błędy.
Donal Rafferty

Odpowiedzi:


279

Możesz użyć następującego wiersza kodu w metodzie onCreate działania, aby upewnić się, że klawiatura wyskakuje tylko wtedy, gdy użytkownik kliknie w EditText

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

U mnie to nie działa (2.2 MyTouch 3G). W mojej metodzie onCreate () wywołuję setSoftInputMode (). EditText nadal powoduje wyświetlanie klawiatury :(
Nate,

To zadziałało dla mnie. Mam Androida 2.3.4 i programuję przy użyciu <uses-sdk android: minSdkVersion = "3" />
Sandy

78
Lub użyj android:windowSoftInputMode="stateHidden"jak tutaj
Swato

Więc to, co mnie wprawia w zakłopotanie, to fakt, że mam aktywność logowania, która wydaje się już dobrze ukrywać klawiaturę. Zrobiłem teraz również rejestrację, ale klawiatura domyślnie się wyskakuje. Jak więc logowanie pozwala tego uniknąć? Nie mogę znaleźć setSoftInputMode w aktywności logowania lub atrybutu windowSoftInputMode w activity.xml.
Chucky

nie zawsze działa: na niektórych urządzeniach SOFT_INPUT_STATE_ALWAYS_HIDDEN powoduje błąd, że tekst edycji, który nie jest ostatni w działaniu, nie może spowodować pojawienia się klawiatury programowej. użycie "android: windowSoftInputMode =" stateHidden "" w manifeście również ma ten sam efekt. dokumentacja programisty stwierdza, że ​​miękka klawiatura nie pojawi się automatycznie, chyba że zostanie do tego zmuszona, ale to po prostu błąd.

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

Działa to dla Androida 3.0, 3.1, 3.2, 4.0 - Edytor używany do kompilacji (Eclipse 3.7)

Umieść 'windowSoftInputMode = "stateHidden"' w pliku manifestu XML swojej aplikacji dla KAŻDEJ czynności, w której chcesz, aby klawiatura oprogramowania pozostała ukryta. Oznacza to, że klawiatura nie pojawi się automatycznie i użytkownik będzie musiał 'kliknąć' pole tekstowe, aby je wyświetlić. Szukałem przez prawie godzinę czegoś, co działało, więc pomyślałem, że się tym podzielę.


Najlepsze rozwiązanie, jakie do tej pory znalazłem. Ustawia ostrość pola bez otwierania klawiatury. Działa na Nexusie S z 4.1.2
alexismorin

1
android: windowSoftInputMode = "stateHidden | adjustNothing" jest również pomocny, jeśli używasz fragmentów i nie chcesz, aby klawiatura zmieniała układ
whyoz

6

Dodaj to w swoim AndroidManifest.xml :

android:windowSoftInputMode="stateHidden|adjustResize"

Działa doskonale. :)


1
Dziękuję za Twoją odpowiedź. Przepraszam, jak mogę teraz zadzwonić do klawiatury? Nie pojawi się, gdy zadzwonisz requestFocus().
Takesi Tokugawa YD

6

Ten kod będzie działał na wszystkich wersjach Androida:

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

Plus 1 za stwierdzenie, które wyskakuje, a które nie
Demon App Programmer

4

Dodaj to w układzie nadrzędnym pliku XML.

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

Zapewnia, że ​​fokus nie znajduje się na editText po rozpoczęciu działania.


3

Możesz użyć tego w metodzie onCreate () działania

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

lub wklej ten kod w tagach Activity w AndroidManifest.xml

android:windowSoftInputMode="stateVisible"

2
Myślę, że masz na myśli raczej „stateHidden” niż „stateVisible”.
stevehs17

2

Możesz dodać pojedynczą linię kodu w Android Mainfest.xml pod tagiem aktywności

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

to może ci pomóc.


1

W tej wersji Androida, gdy widok jest zawyżony, fokus zostanie domyślnie ustawiony na pierwszą kontrolkę, na którą można ustawić fokus - a jeśli nie ma fizycznej klawiatury, pojawi się klawiatura ekranowa.

Aby to naprawić, jawnie ustaw fokus w innym miejscu. Jeśli fokus jest ustawiony na cokolwiek innego niż EditText, klawiatura ekranowa nie pojawi się.

Czy próbowałeś to przetestować, uruchamiając Androida 1.5 w emulatorze?


Wypróbowałem to w emulatorze (i zrobiłem to ponownie, aby upewnić się, że nie jestem szalony). Działa „prawidłowo” (co oznacza brak wyskakującej klawiatury). Poza tym, kiedy pierwotnie to pisałem, mój G1 działał w wersji 1.5 i nie działał w ten sposób (kiedy klawiatura była „ukryta”).
Jeremy Logan

Nadal założę się, że ma to coś wspólnego z początkową koncentracją. Może to coś specyficznego dla HTC Hero, ale spróbuję ustawić fokus wyraźnie na coś innego i zobaczyć, czy to rozwiąże problem dla użytkowników.
Mark B

Czy jest jakiś sposób, aby skupić się na „niczym”?
Jeremy Logan

1
U mnie to nie działa (2.2 MyTouch 3G). W mojej metodzie onCreate () jawnie wywołuję requestFocus () na przycisku, który jest drugim widżetem w widoku. EditText nadal powoduje wyświetlanie klawiatury :(
Nate,

1

Możesz to zrobić programowo, jak

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

lub umieścić android:windowSoftInputMode="stateHidden"w <activity tagśrodkuAndroidManifest.xml


1

Uwzględnij to, gdy import jest na górze:

import android.view.WindowManager;

Dodaj ten kod do części 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);

* To jest dla Android.xamarin i FindFocus () - wyszukuje widok w hierarchii zakorzenionej w tym widoku, który jest obecnie aktywny, ponieważ mam _enterPin.RequestFocus () przed powyższym kodem, więc pokazuje klawiaturę dla _enterPin EditText *

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.