Jak usunąć automatyczne ustawianie ostrości / wyskakujące okienko klawiatury pola, gdy pojawia się ekran?

105

Mam ekran, na którym pierwsze pole to EditText i na nim fokus pojawia się przy starcie, a także wyskakuje numeryczny typ wprowadzania, co jest bardzo denerwujące

Jak mogę się upewnić, że po rozpoczęciu działania fokus nie zostanie przeniesiony i / lub panel wprowadzania danych nie zostanie podniesiony?

Pentium10
źródło

Odpowiedzi:

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

lub

ustaw właściwość activity w pliku manifestu, jak poniżej w tagu aplikacji

android:windowSoftInputMode="stateHidden"
Mitul Nakum
źródło
Ustawienie android: windowSoftInputMode w pliku AndroidManifest.xml można wykonać OR z innymi wartościami. Tryb zwykle implikuje pojedyncze wartości, ale w tym przypadku wartość jest zbiorem flag. Opis wartości: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

przejdź do pliku manifestu aplikacji i napisz tę linię dla tego działania, dla którego chcesz wyłączyć automatyczne wyskakujące okienko klawiatury.

android:windowSoftInputMode="stateHidden"
sm. euro
źródło
Nie działa dla mnie. Umieściłem to w activity_main.xml. To działało idealnie, gdy umieściłem go w onCreate (). getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
glez
20

Aby programowo nie wyświetlać klawiatury, ale domyślny widżet nadal odbierał wywołanie fokusa:

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

w onResume()

danmux
źródło
11
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

wywołać powyższą metodę wewnątrz onCreate (), co zapobiega wyświetlaniu softKeyboard, chyba że użytkownik wybierze EditText przeztapping or clicking.

lub po prostu dodaj android:windowSoftInputMode="stateHidden"tag aktywności wManifest.xml

Xar-e-ahmer Khan
źródło
10

Zwykle jest to bałagan. Pierwszą rzeczą, którą próbuję, jest próba przejęcia ostrości innym widokiem przez. Musisz także mieć możliwość ustawiania ostrości i ustawiania ostrościInTouchMode.

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

    <requestFocus/>
</TextView>
urSus
źródło
To działa. Uważam, że jest to czystsze podejście, ale zależy to również od warunków. Akceptuję ten.
Jaydeep W,
5

Skoncentruj się na innym widoku. Domyślnie pierwszy widok, na który można ustawić fokus, stanie się aktywny, gdy układ zostanie zawyżony. Możesz zażądać skupienia się na innym widoku przez XML:

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

    <requestFocus />
</TextView>

Działa to dla każdego widoku.

Jeśli chcesz to zrobić programowo, możesz użyć view.requestFocus().

Jason Robinson
źródło
0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
Paul Liang
źródło
3
Witamy w StackOverflow! To nie jest podobne do innych forów, jeśli chcesz zmienić swoją odpowiedź, po prostu kliknij editlink i wprowadź zmiany. Spróbuj sformatować kod, wybierając go i używając przycisku Przykład kodu {}lub naciskając Ctrl+K.
Peter Lang
0

Dodanie android:windowSoftInputMode="stateHidden"do aktywności w manifeście powoduje ukrycie klawiatury tylko podczas uruchamiania działania lub tak, jak mówi Google

Gdy użytkownik pozytywnie przechodzi do przodu do działania, zamiast wracać do niego z powodu opuszczenia innego działania

Aby ukryć klawiaturę również wtedy, gdy użytkownik naciśnie przycisk Wstecz i wróci do Twojej aktywności z innej czynności, użyj android:windowSoftInputMode="stateAlwaysHidden"

Devansh Maurya
źródło
-1

nie próbowałem tego ani nie jestem w pobliżu mojego komputera programującego, ale podejrzewam, że programowe wysłanie fokusu do widoku rodzica lub coś w tym rodzaju może załatwić sprawę - to bardziej prawdopodobne obejście niż rozwiązanie, ale znowu nie mogę go przetestować po prostu myśl

Ben
źródło
1
Próbowałem tego, ale nie działa. Zadzwoniłem .requestFocus();na przycisk i nadal pojawiają się wyskakujące okienka klawiatury.
Pentium10
myśli można dodawać jako komentarze
Alberto M