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.