Android: Forcez EditText à supprimer le focus?

Je voudrais pouvoir supprimer le focus du EditText. Par exemple, si le clavier apparaît et que l’utilisateur le cache avec le bouton Retour, j’aimerais que le focus et le curseur disparaissent. Comment ceci peut être fait?

Vous pouvez l’append à onCreate et cela onCreate le clavier à chaque démarrage de l’activité.

Vous pouvez également modifier le focus par programme sur un autre élément.

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

Vous pouvez faire disparaître le curseur et la mise au point par

 edittext.clearFocus(); 

Mais détectez quand le cache du clavier est un travail difficile.

Ajoutez LinearLayout avant EditText dans votre XML.

  

Ou vous pouvez faire la même chose en ajoutant ces lignes à afficher avant votre “EditText”.

   

Supprimer le focus mais restr focalisable:

 editText.setFocusableInTouchMode(false); editText.setFocusable(false); editText.setFocusableInTouchMode(true); editText.setFocusable(true); 

EditText perd le focus, mais peut le gagner à nouveau sur un nouvel événement tactile.

supprimer autofocus edittext android

Ça marche pour moi

Modifier Dans le lien qu’ils proposent d’utiliser LinearLayout, mais simple View fonctionnera

  

Alors, si ce “voleur” est placé en haut de la disposition (pour être le premier élément clearFocus() être clearFocus() ), les appels à clearFocus() fonctionneront.

Ajoutez ces deux propriétés à votre mise en page parente (ex: disposition linéaire, mise en page relative)

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

Ça va faire l’affaire 🙂

Vous pouvez également inclure Android: windowSoftInputMode = “stateAlwaysHidden” dans votre section d’action manifeste.

Ceci est équivalent à:

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

mais de manière XML.

Pour info, vous pouvez également masquer le clavier avec des codes:

 // hide virtual keyboard InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(mYourEditText.getWindowToken(), 0); 

vous devez supprimer

si vous ne l’utilisez pas et toujours le même problème

utilisateur LinearLayout tant que parent et ensemble

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

J’espère que cela vous aidera.

essayez d’utiliser celui-ci à votre avis, cela a fonctionné pour moi:

  

Ajoutez à votre disposition parente où vous avez placé votre EditText cet android:focusableInTouchMode="true"

Pour masquer le clavier lorsque l’activité commence .. écrivez le code suivant dans onCreate () ..

 InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(), 0); 

Pour effacer la mise au point et supprimer le curseur de edittext …..

 editText.clearFocus(); editText.setCursorVisible(false); 

C’est ma toute première réponse sur SO, alors ne soyez pas trop dur avec moi s’il y a des erreurs. :RÉ

Il y a peu de réponses qui flottent autour du SO, mais je ressens le besoin de publier ma solution complète car cela m’a rendu fou. J’ai attrapé des morceaux de tout autour alors pardonnez-moi si je ne donne pas les crédits respectifs à tout le monde … 🙂

(Je simplifierai mon résultat car ma vue contient trop d’éléments et je ne veux pas envoyer de spam avec ça et je vais essayer de le rendre aussi générique que possible…)

Pour votre mise en page, vous avez besoin d’un parent, votre vue EditText et votre vue parent ont été définies comme suit:

    

Donc, j’avais besoin de quelques choses ici. Je devais avoir un espace réservé pour mon EditText – qui est celui –

android: hint = “hint”

Aussi,

 android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" 

Cela a permis à EditText de ne pas se concentrer sur la saisie de l’ activité et plus tard dans l’ activité elle-même lors de la définition de ce paramètre. Vous pouvez donc définir onTouchListener pour voler le focus de EditText .

Maintenant, dans l’activité:

 package com.at.keyboardhide; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.view.View.OnTouchListener; import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.LinearLayout; public class MainActivity extends Activity implements OnTouchListener{ private EditText getEditText; private LinearLayout getLinearLayout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); setContentView(R.layout.keyboardmain); getEditText = (EditText)findViewById(R.id.etEditor); getLinearLayout = (LinearLayout)findViewById(R.id.lytContainer); getLinearLayout.setOnTouchListener(this); getEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { Log.d("EDTA", "text was entered."); getEditText.clearFocus(); imm.hideSoftInputFromWindow(barcodeNo.getWindowToken(), 0); return true; } return false; } }); } @Override public boolean onTouch(View v, MotionEvent event) { if(v==getLinearLayout){ InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getEditText.getWindowToken(), 0); getEditText.clearFocus(); return true; } return false; } } 

Peu de réponses pour les bits que j’ai trouvés sur cette page de questions, et la partie avec la solution Activité que j’ai trouvée sur ce blog . Le rest qui me manquait et que je devais découvrir était de me concentrer sur le EditText auquel j’avais ajouté à la fois dans setOnEditorActionListener et onTouchLister pour la vue parente .

J’espère que cela aide quelqu’un et économise son temps. 🙂

A bientôt, Z.

Dans les commentaires, vous avez demandé si une autre vue pouvait être mise au point à la place de EditText. Oui il peut. Utilisez la méthode .requestFocus() pour la vue que vous souhaitez focaliser au début (dans la méthode onCreate ())

La focalisation d’une autre vue supprime également une certaine quantité de code. (code pour cacher le clavier par exemple)

Vous pouvez également inclure android:windowSoftInputMode="stateAlwaysHidden" dans votre section d’action manifeste.

Ceci est équivalent à:

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

J’ai eu le même problème. Cela m’a rendu plus que fou.

J’ai eu un Dialog étendu avec un ScrollView qui avait un TableLayout avec LinearLayout étendu qui contenait un SeekBar et un EditText.

Le premier EditText avait toujours la mise au point automatique après avoir montré le dialog et après avoir fini d’éditer le texte sur le clavier, le EditText était toujours au point et le clavier était toujours visible.

J’ai essayé presque toutes les solutions de ce fil et aucune n’a fonctionné pour moi.

Alors voici ma solution simple : (text = EditText)

 text.setOnEditorActionListener( new OnEditorActionListener( ){ public boolean onEditorAction( TextView v, int actionId, KeyEvent event ){ if( (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) || (actionId == EditorInfo.IME_ACTION_DONE) ){ text.clearFocus( ); InputMethodManager iMgr = null; iMgr = (InputMethodManager)mContext.getSystemService( Context.INPUT_METHOD_SERVICE ); iMgr.hideSoftInputFromWindow( text.getWindowToken(), 0 ); } return true; } }); 

D’ailleurs, je n’ai utilisé aucun des extraits suivants pour le résoudre:

 //setFocusableInTouchMode( true ) //setFocusable( true ) //setDescendantFocusability( ViewGroup.FOCUS_BEFORE_DESCENDANTS ) 

ET je n’ai pas utilisé d’élément d’espacement comme une vue avec une largeur et une hauteur de 1dp.

Espérons que cela aide quelqu’un: D

 editText.setFocusableInTouchMode(true) 

EditText sera en mesure d’obtenir le focus lorsque l’utilisateur le touchera. Lorsque la disposition principale (activité, boîte de dialog, etc.) devient visible, EditText ne EditText pas automatiquement le focus même s’il s’agit de la première vue de la mise en page.

 EditText.setOnKeyListener(new OnKeyListener() { public boolean onKey(View view, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(URLText.getWindowToken(), 0); EditText.setFocusable(false); EditText.setFocusableInTouchMode(true); return true; } else { return false; } } }); 

Vous pouvez éviter tout focus sur vos éléments en définissant l’atsortingbut android: descendantFocusability de l’élément parent.

Voici un exemple:

   

Ici, l’atsortingbut android: descendantFocusability défini sur “blocksDescendants” bloque le focus sur les éléments enfants.

Vous pouvez trouver plus d’informations ici .

 check your xml file  ****  //Remove **** from xml