Comment masquer le clavier virtuel lorsque l'activité commence

151

J'ai un Edittext avec android:windowSoftInputMode="stateVisible"dans Manifest. Maintenant, le clavier s'affiche lorsque je démarre l'activité. Comment le cacher? Je ne peux pas utiliser android:windowSoftInputMode="stateHiddencar lorsque le clavier est visible, réduisez l'application et reprenez-la, le clavier doit être visible. J'ai essayé avec

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

Mais cela n'a pas fonctionné.

Aju
la source

Réponses:

1

Si vous ne souhaitez pas utiliser xml, créez une extension Kotlin pour masquer le clavier

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

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

Alternatives basées sur le cas d'utilisation:

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

Comment afficher le clavier virtuel

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

Méthode plus simple lors de la demande simultanée de focus sur un edittext

myEdittext.focus()

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

Simplification du bonus:

Supprimer l'exigence pour toujours utiliser getSystemService: Splitties Library

// Simplifies above solution to just
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
Gibolt
la source
361

Dans le AndroidManifest.xml:

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

ou essayez

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

Veuillez vérifier ceci également

Neenu
la source
3
Merci pour android:windowSoftInputMode="stateHidden"
Shylendra Madda
2
En fait, il existe également une excellente réponse pour éviter de se concentrer sur le texte d'édition stackoverflow.com/questions/4668210/...
Boris Treukhov
204

Utilisez les fonctions suivantes pour afficher / masquer le clavier:

/**
 * 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
la source
4
Context.INPUT_METHOD_SERVICE pour ceux qui sont en fragments ou ne sont pas dans l'activité principale etc.
Oliver Dixon
7
Vous pouvez essayer ceci. Cela fonctionne si vous l'appelez depuis l'activité. getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN) ‌;
Sinan Dizdarević
Et si nous devons appeler cela à partir d'un auditeur? J'aimeonFocusChange()
André Yuhai le
44

Ajoutez simplement deux attributs à la vue parente de editText.

android:focusable="true"
android:focusableInTouchMode="true"
mani
la source
36

Mettez ceci dans le manifeste à l'intérieur de la balise Activity

  android:windowSoftInputMode="stateHidden"  
Saneesh
la source
ou android: windowSoftInputMode = "stateUnchanged" - Cela fonctionne comme: ne l'affichez pas s'il n'est pas déjà affiché, mais s'il était ouvert lors de l'entrée dans l'activité, laissez-le ouvert).
Sujeet Kumar Gupta le
tu as raison. mais que se passerait-il si l'orientation changeait?
Saneesh le
26

Essaye ça:

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

Regardez celui- ci pour plus de détails.

Adnan
la source
14

Pour masquer le clavier logiciel au moment du démarrage d'une nouvelle activité ou onCreate(), onStart()etc., vous pouvez utiliser le code ci-dessous:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Rana Pratap Singh
la source
10

Utilisation d' AndroidManifest.xml

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

Utilisation de Java

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

en utilisant la solution ci-dessus, le clavier cache mais edittext ne prend pas le focus lors de la création de l'activité, mais saisissez-le lorsque vous le touchez en utilisant:

ajouter dans votre EditText

<EditText
android:focusable="false" />

ajoutez également un écouteur de votre EditText

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

Ajoutez le texte suivant à votre fichier 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>
Les coups
la source
6

J'espère que cela fonctionnera, j'ai essayé beaucoup de méthodes mais celle-ci a fonctionné pour moi fragments. mettez simplement cette ligne dans onCreateview / init.

getActivity().getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Mubashar
la source
5

Pour masquer le clavier logiciel au moment du démarrage d'une nouvelle activité ou de la méthode onCreate (), onStart (), etc., utilisez le code ci-dessous:

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

Pour masquer le clavier logiciel au moment du bouton, cliquez sur l'activité:

View view = this.getCurrentFocus();

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

Utilisez SOFT_INPUT_STATE_ALWAYS_HIDDEN au lieu de SOFT_INPUT_STATE_HIDDEN

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Brinda Rathod
la source
5

ajoutez dans votre activité dans les manifestes cette propriété

android:windowSoftInputMode="stateHidden" 
yousef
la source
4

Mettez ce code dans votre fichier java et passez l'argument d'objet sur edittext,

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
Najib Ahmed Puthawala
la source
4

Vous pouvez définir la configuration sur AndroidManifest.xml

Exemple:

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

Utilisez le code suivant pour masquer le clavier virtuel pour la première fois lorsque vous démarrez l'activité

getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);
Geeta Gupta
la source
3

Essayez aussi celui-ci

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
la source
3

Les réponses ci-dessus sont également correctes. Je veux juste dire qu'il y a deux façons de masquer le clavier lors du démarrage de l'activité, à partir de manifest.xml. par exemple:

<activity
..........
android:windowSoftInputMode="stateHidden"
..........
/>
  • La manière ci-dessus le cache toujours lors de l'entrée dans l'activité.

ou

<activity
..........
android:windowSoftInputMode="stateUnchanged"
..........
/>
  • Celui-ci dit de ne pas le changer (par exemple, ne le montrez pas s'il n'est pas déjà affiché, mais s'il était ouvert lors de l'entrée dans l'activité, laissez-le ouvert).
Sujeet Kumar Gupta
la source
2

C'est ce que j'ai fait:

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
la source
2

Si votre application cible l' API Android de niveau 21 ou supérieur , une méthode par défaut est disponible.

editTextObj.setShowSoftInputOnFocus(false);

Assurez-vous d'avoir défini le code ci-dessous dans la EditTextbalise XML.

<EditText  
    ....
    android:enabled="true"
    android:focusable="true" />
Harpreet
la source
1

Essaye ça.

Tout d'abord dans votre xml interrogeable, les champs (nom et indice, etc.) mettent @stringet non des chaînes littérales.

Ensuite, la méthode onCreateOptionsMenudoit avoir un ComponentNameobjet avec le nom de votre package et le nom de votre classe complété (avec le nom du package) - Dans le cas où l'activité qui contient le SearchViewcomposant est la même que celle utilisée getComponentName()dans les résultats de la recherche , comme le dit le développeur Google Android.

J'ai essayé beaucoup de solutions et après beaucoup de travail, cette solution fonctionne pour moi.

toktokwho
la source
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
la source
1
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

ça fonctionnera


la source
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la raison et / ou la manière dont ce code répond à la question améliore sa valeur à long terme.
rollstuhlfahrer