Jak ukryć klawiaturę programową po rozpoczęciu aktywności

151

Mam Edittext android:windowSoftInputMode="stateVisible"w Manifest. Teraz klawiatura zostanie wyświetlona, ​​gdy rozpocznę aktywność. Jak to ukryć? Nie mogę użyć, android:windowSoftInputMode="stateHiddenponieważ gdy klawiatura jest widoczna, zminimalizuj aplikację i wznów ją, klawiatura powinna być widoczna. Próbowałem z

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

ale to nie zadziałało.

Aju
źródło

Odpowiedzi:

1

Jeśli nie chcesz używać XML, utwórz rozszerzenie Kotlin, aby ukryć klawiaturę

// In onResume, call this
myView.hideKeyboard()

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

Alternatywy oparte na przypadku użycia:

fun Fragment.hideKeyboard() {
    view?.let { activity?.hideKeyboard(it) }
}

fun Activity.hideKeyboard() {
    // Calls Context.hideKeyboard
    hideKeyboard(currentFocus ?: View(this))
}

fun Context.hideKeyboard(view: View) {
    view.hideKeyboard()
}

Jak wyświetlić miękką klawiaturę

fun Context.showKeyboard() { // Or View.showKeyboard()
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}

Prostsza metoda przy jednoczesnym żądaniu skupienia się na pliku edittext

myEdittext.focus()

fun View.focus() {
    requestFocus()
    showKeyboard()
}

Uproszczenie premii:

Usuń wymóg używania getSystemService: Splitties Library

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
Gibolt
źródło
361

W AndroidManifest.xml:

<activity android:name="com.your.package.ActivityName"
          android:windowSoftInputMode="stateHidden"  />

lub spróbuj

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)‌​;

Sprawdź to również

Neenu
źródło
3
Dzięki za android:windowSoftInputMode="stateHidden"
Shylendra Madda
2
Właściwie jest też świetna odpowiedź na zapobieganie skupianiu się na edycji tekstu stackoverflow.com/questions/4668210/ ...
Boris Treukhov Stycznia
204

Użyj następujących funkcji, aby pokazać / ukryć klawiaturę:

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}
Sherif elKhatib
źródło
4
Context.INPUT_METHOD_SERVICE dla tych, którzy są we fragmentach lub nie biorą udziału w głównej działalności itp.
Oliver Dixon
7
Możesz tego spróbować. Działa, jeśli zadzwonisz z aktywności. getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) ‌;
Sinan Dizdarević
A co, jeśli musimy zadzwonić do tego z poziomu słuchacza? Na przykładonFocusChange()
André Yuhai
44

Po prostu dodaj dwa atrybuty do widoku nadrzędnego editText.

android:focusable="true"
android:focusableInTouchMode="true"
mani
źródło
36

Umieść to w manifeście wewnątrz tagu Activity

  android:windowSoftInputMode="stateHidden"  
Saneesh
źródło
lub android: windowSoftInputMode = "stateUnchanged" - Działa to tak: nie pokazuj go, jeśli nie jest jeszcze pokazany, ale jeśli był otwarty podczas wchodzenia do działania, pozostaw go otwarty).
Sujeet Kumar Gupta
tak, masz rację. ale co jeśli zmieniła się orientacja?
Saneesh
26

Spróbuj tego:

<activity
    ...
    android:windowSoftInputMode="stateHidden|adjustResize"
    ...
>

Spójrz na ten, aby uzyskać więcej informacji.

Adnan
źródło
14

Aby ukryć softkeyboard w momencie rozpoczęcia nowej działalności lub onCreate(), onStart()itp można wykorzystać poniższy kod:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Rana Pratap Singh
źródło
10

Korzystanie z AndroidManifest.xml

<activity android:name=".YourActivityName"
      android:windowSoftInputMode="stateHidden"  
 />

Korzystanie z języka Java

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

używając powyższego rozwiązania ukryj klawiaturę, ale edittext nie przejmuje fokusu podczas tworzenia aktywności, ale chwyć ją, gdy ją dotkniesz, używając:

dodaj w swoim EditText

<EditText
android:focusable="false" />

dodaj także odbiornik swojego EditText

youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    v.setFocusable(true);
    v.setFocusableInTouchMode(true);
    return false;
}});
Atif Amin
źródło
7

Dodaj następujący tekst do pliku xml.

<!--Dummy layout that gain focus -->
            <LinearLayout
                android:layout_width="0dp"
                android:layout_height="0dp"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:orientation="vertical" >
            </LinearLayout>
Trafienia
źródło
6

Mam nadzieję, że to zadziała, próbowałem wielu metod, ale ta zadziałała fragments. po prostu umieść tę linię w onCreateview / init.

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Mubaszar
źródło
5

Aby ukryć klawiaturę programową w momencie rozpoczęcia nowej aktywności lub metody onCreate (), onStart () itp. Użyj poniższego kodu:

getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);

Aby ukryć klawiaturę programową w momencie kliknięcia przycisku w działaniu:

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }
Adam
źródło
5

Użyj SOFT_INPUT_STATE_ALWAYS_HIDDEN zamiast SOFT_INPUT_STATE_HIDDEN

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Brinda Rathod
źródło
5

dodaj swoją aktywność w manifestach tę właściwość

android:windowSoftInputMode="stateHidden" 
yousef
źródło
4

Umieść ten kod w swoim pliku java i przekaż argument obiektu na edittext,

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
Najib Ahmed Puthawala
źródło
4

Możesz ustawić konfigurację na AndroidManifest.xml

Przykład:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>
Long Nguyen
źródło
4

Użyj poniższego kodu, aby ukryć klawiaturę programową po raz pierwszy po uruchomieniu działania

getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Geeta Gupta
źródło
3

Wypróbuj również ten

Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});
ritesh4326
źródło
3

Powyższe odpowiedzi również są poprawne. Chcę tylko powiedzieć, że istnieją dwa sposoby na ukrycie klawiatury podczas uruchamiania działania, z manifest.xml. na przykład:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • Powyższy sposób zawsze ukrywaj go przy wejściu do aktywności.

lub

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • Ten mówi, żeby go nie zmieniać (np. Nie pokazuj go, jeśli nie jest już pokazany, ale jeśli był otwarty podczas wchodzenia do działania, zostaw go otwarty).
Sujeet Kumar Gupta
źródło
2

Oto co zrobiłem:

yourEditText.setCursorVisible(false); //This code is used when you do not want the cursor to be visible at startup
        yourEditText.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                v.onTouchEvent(event);   // handle the event first
                InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                if (imm != null) {

                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);  // hide the soft keyboard
                    yourEditText.setCursorVisible(true); //This is to display cursor when upon onTouch of Edittext
                }
                return true;
            }
        });
mangu23
źródło
2

Jeśli Twoja aplikacja jest przeznaczona dla interfejsu API systemu Android na poziomie 21 lub wyższym, dostępna jest metoda domyślna.

editTextObj.setShowSoftInputOnFocus(false);

Upewnij się, że ustawiłeś poniższy kod w EditTexttagu XML.

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />
Harpreet
źródło
1

Spróbuj tego.

Najpierw w przeszukiwalnym pliku XML pola (nazwa i podpowiedź itp.) Wstaw, @stringa nie dosłowne ciągi.

Następnie metoda onCreateOptionsMenumusi mieć ComponentNameobiekt z nazwą twojego pakietu i ukończoną nazwą klasy (z nazwą pakietu) - w przypadku, gdy aktywność, która zawiera SearchViewkomponent, jest taka sama, jak użycie wyników wyszukiwania show getComponentName(), jak mówi programista Google Android.

Wypróbowałem wiele rozwiązań i po wielu, wielu pracach to rozwiązanie działa dla mnie.

toktokwho
źródło
1
Ed_Cat_Search = (EditText) findViewById(R.id.editText_Searc_Categories);

Ed_Cat_Search.setInputType(InputType.TYPE_NULL);

Ed_Cat_Search.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        Ed_Cat_Search.setInputType(InputType.TYPE_CLASS_TEXT);
        Ed_Cat_Search.onTouchEvent(event); // call native handler
        return true; // consume touch even
    }
});

this one worked for me
user3024334
źródło
1
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

to zadziała


źródło
Chociaż ten kod może odpowiedzieć na pytanie, zapewnia dodatkowy kontekst dotyczący tego, dlaczego i / lub jak ten kod odpowiada, poprawia jego długoterminową wartość.
rollstuhlfahrer