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.

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)

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ż


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

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"

36

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

  android:windowSoftInputMode="stateHidden"  

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.


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

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

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>

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

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

5

Użyj SOFT_INPUT_STATE_ALWAYS_HIDDEN zamiast SOFT_INPUT_STATE_HIDDEN

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

5

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

android:windowSoftInputMode="stateHidden" 

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

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"/>

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

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

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).

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

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" />

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.


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

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

to zadziała


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
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.