Come nascondere la tastiera virtuale all'avvio dell'attività


151

Ho un Edittext con android:windowSoftInputMode="stateVisible"in Manifest. Ora la tastiera verrà mostrata quando inizio l'attività. Come nasconderlo? Non posso usarlo android:windowSoftInputMode="stateHiddenperché quando la tastiera è visibile, ridurre al minimo l'app e riprenderla dovrebbe essere visibile. Ci ho provato

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

ma non ha funzionato.

Risposte:


1

Se non vuoi usare xml, crea un'estensione Kotlin per nascondere la tastiera

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

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

Alternative basate sul caso d'uso:

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

Come mostrare la tastiera virtuale

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

Metodo più semplice quando si richiede contemporaneamente lo stato attivo su un edittext

myEdittext.focus()

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

Semplificazione del bonus:

Rimuovi i requisiti per l'utilizzo getSystemService: Splitties Library

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)

361

Nel AndroidManifest.xml:

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

o prova

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

Si prega di controllare anche questo


3
Grazie per android:windowSoftInputMode="stateHidden"
Shylendra Madda,

2
In realtà v'è anche grande risposta sulla prevenzione concentrandosi sulla modifica del testo stackoverflow.com/questions/4668210/...
Boris Treukhov

204

Utilizzare le seguenti funzioni per mostrare / nascondere la tastiera:

/**
 * 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 per coloro che sono in frammenti o che non fanno parte dell'attività principale ecc.
Oliver Dixon,

7
Puoi provare questo. Funziona se lo chiami dall'attività. . getWindow () setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Sinan Dizdarević,

E se avessimo bisogno di chiamarlo da un ascoltatore? Mi piaceonFocusChange()
André Yuhai il

44

Aggiungi solo due attributi alla vista principale di editText.

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

36

Inseriscilo nel manifest all'interno del tag Activity

  android:windowSoftInputMode="stateHidden"  

o android: windowSoftInputMode = "stateUnchanged" - Funziona come: non mostrarlo se non è già mostrato, ma se era aperto quando si entra nell'attività, lasciarlo aperto).
Sujeet Kumar Gupta,

hai ragione. ma cosa succede se l'orientamento è cambiato?
Saneesh,

26

Prova questo:

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

Guarda questo per maggiori dettagli.


14

Per nascondere la softkeyboard al momento dell'avvio di Nuova attività o onCreate(), onStart()ecc. , È possibile utilizzare il codice seguente:

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

10

Utilizzando AndroidManifest.xml

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

Usando Java

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

usando la soluzione sopra descritta nascondi ma edittext dal mettere a fuoco quando si crea activiy, ma afferralo quando li tocchi usando:

aggiungi nel tuo EditText

<EditText
android:focusable="false" />

aggiungi anche il listener del tuo EditText

youredittext.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
    v.setFocusable(true);
    v.setFocusableInTouchMode(true);
    return false;
}});

7

Aggiungi il seguente testo al tuo file 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

Spero che funzioni, ho provato molti metodi ma questo ha funzionato per me fragments. basta inserire questa riga in onCreateview / init.

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

5

Per nascondere la softkeyboard al momento dell'avvio di Nuova attività o del metodo onCreate (), onStart () ecc., Utilizzare il codice seguente:

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

Per nascondere la softkeyboard al momento del pulsante è fare clic nell'attività:

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

5

Utilizza SOFT_INPUT_STATE_ALWAYS_HIDDEN anziché SOFT_INPUT_STATE_HIDDEN

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

5

aggiungi la tua attività in manifesta questa proprietà

android:windowSoftInputMode="stateHidden" 

4

Inserisci questo codice nel tuo file java e passa l'argomento per oggetto su edittext,

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

4

Puoi impostare config su AndroidManifest.xml

Esempio:

<activity
    android:name="Activity"
    android:configChanges="orientation|keyboardHidden"
    android:theme="@*android:style/Theme.NoTitleBar"
    android:launchMode="singleTop"
    android:windowSoftInputMode="stateHidden"/>

4

Utilizzare il codice seguente per nascondere la tastiera per la prima volta quando si avvia l'attività

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

3

Prova anche questo

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

Le risposte sopra sono anche corrette. Voglio solo dare una breve spiegazione che ci sono due modi per nascondere la tastiera all'avvio dell'attività, da manifest.xml. per esempio:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • Il modo sopra lo nasconde sempre quando si entra nell'attività.

o

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • Questo dice di non cambiarlo (ad es. Non mostrarlo se non è già mostrato, ma se era aperto quando si entra nell'attività, lasciarlo aperto).

2

Questo è quello che ho fatto:

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

Se la tua applicazione ha come target Android API Level 21 o superiore, è disponibile un metodo predefinito.

editTextObj.setShowSoftInputOnFocus(false);

Assicurati di aver impostato il codice seguente nel EditTexttag XML.

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />

1

Prova questo.

Innanzitutto nel tuo XML ricercabile, inserisci i campi (nome e suggerimento, ecc.) @stringE non stringhe letterali.

Quindi metodo onCreateOptionsMenu, deve avere un ComponentNameoggetto con il nome del pacchetto e il nome della classe completato (con il nome del pacchetto) - Nel caso in cui l'attività che ha il SearchViewcomponente sia la stessa utilizzata dai risultati della ricerca mostra getComponentName(), come dice lo sviluppatore google android.

Ho provato molte soluzioni e dopo tanto, tanto lavoro questa soluzione funziona per me.


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

funzionerà


Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo riguardo al perché e / o al modo in cui questo codice risponde alla domanda migliora il suo valore a lungo termine.
rollstuhlfahrer,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.