Comment supprimer focus de single editText

Dans mon application, j’ai un seul EditText avec des TextViews , un bouton et un spinner. Mon EditText est ciblé car il s’agit de la seule vue focalisable dans cette activité, je crois. Mon EditText s’affiche avec une bordure orange et un curseur sur le champ.

Maintenant, je voudrais supprimer le focus de ce champ (je ne veux pas que le curseur et la bordure apparaissent). Y a-t-il un moyen de faire cela?

J’ai pu me concentrer sur le bouton en utilisant button.seFocusableInTouchMode() et button.requestFocus() . Mais cela met en évidence le bouton et n’est évidemment pas ce que je veux.

cochez cette question et la réponse sélectionnée: Arrêtez EditText de se concentrer au démarrage de l’activité C’est moche mais ça marche, et pour autant que je sache, il n’y a pas de meilleure solution.

Avez-vous essayé d’utiliser l’ancien bon View.clearFocus()

nouveau à Android .. essayé

 getWindow().getDecorView().clearFocus(); 

ça marche pour moi … corrigez-moi gentiment s’il y a quelque chose qui ne va pas 🙂

juste pour append .. votre mise en page devrait avoir:

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

Je vais essayer d’expliquer comment supprimer le curseur (curseur clignotant) de la vue EditText avec plus de détails et de compréhension. Habituellement, cette ligne de code devrait fonctionner

 editText.clearFocus() 

mais cela peut être le cas lorsque editText a toujours le focus, et cela se produit parce que la méthode clearFocus () essaie de redéfinir le focus sur la première vue focalisable de la disposition activité / fragment.

Donc, si l’activité ne peut être focalisée que sur une seule vue, et que cela correspond généralement à votre vue EditText, alors clearFocus () redéfinira le focus sur cette vue, et pour vous, clearFocus () ne fonctionnera pas. N’oubliez pas que les vues EditText sont focusables (true) par défaut. Par conséquent, si vous ne disposez que d’une seule vue EditText dans votre mise en page, vous obtiendrez toujours le focus à l’écran. Dans ce cas, votre solution sera de trouver la vue parente (une mise en page, ex LinearLayout, Framelayout) dans votre fichier de mise en page et de lui définir ce code xml

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

Après cela, lorsque vous exécutez editText.clearFocus (), la vue parent dans votre mise en page acceptera le focus et votre editText sera vide du focus.

J’espère que cela aidera quelqu’un à comprendre comment fonctionne clearFocus ().

Je sais que c’est trop tard, mais pour quelqu’un qui a le même besoin, editText.setFocusable (false) est ce que vous cherchez.

Utilisez le code ci-joint pour mettre l’accent sur “quelqu’un d’autre”, c’est bien si vous avez une vue où vous voulez simplement supprimer le clavier et libérer le focus, vous ne vous souciez pas vraiment de savoir qui l’obtient.

Utilisez comme ceci: FocusHelper.releaseFocus (viewToReleaseFocusFrom)

 public class FocusHelper { public static void releaseFocus(View view) { ViewParent parent = view.getParent(); ViewGroup group = null; View child = null; while (parent != null) { if (parent instanceof ViewGroup) { group = (ViewGroup) parent; for (int i = 0; i < group.getChildCount(); i++) { child = group.getChildAt(i); if(child != view && child.isFocusable()) child.requestFocus(); } } parent = parent.getParent(); } } } 

Doc: La méthode traverse la vue enfant et la vue dans l'arborescence et recherche le premier enfant auquel se concentrer.

Edit: Vous pouvez également utiliser l'API pour cela:

 View focusableView = v.focusSearch(View.FOCUS_DOWN); if(focusableView != null) focusableView.requestFocus(); 

J’ai eu un problème similaire avec le editText, qui a gagné en importance depuis le début de l’activité. ce problème que j’ai résolu facilement comme ceci:

vous ajoutez ce morceau de code dans la mise en page qui contient le editText dans xml:

  android:id="@+id/linearlayout" android:focusableInTouchMode="true" 

n’oublie pas l’ android:id , sans elle j’ai une erreur.

L’autre problème que j’ai eu avec le editText est qu’une fois qu’il obtient le premier focus, le focus n’a jamais disparu. Ceci est un morceau de mon code dans Java, il a un editText et un bouton qui capture le texte dans le editText:

  editText=(EditText) findViewById(R.id.et1); tvhome= (TextView)findViewById(R.id.tv_home); etBtn= (Button) findViewById(R.id.btn_homeadd); etBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { tvhome.setText( editText.getText().toSsortingng() ); //** this code is for hiding the keyboard after pressing the button View view = Settings.this.getCurrentFocus(); if (view != null) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } //** editText.getText().clear();//clears the text editText.setFocusable(false);//disables the focus of the editText Log.i("onCreate().Button.onClickListener()", "et.isfocused= "+editText.isFocused()); } }); editText.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(v.getId() == R.id.et1) { v.setFocusableInTouchMode(true);// when the editText is clicked it will gain focus again //** this code is for enabling the keyboard at the first click on the editText if(v.isFocused())//the code is optional, because at the second click the keyboard shows by itself { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT); } //** Log.i("onCreate().EditText.onClickListener()", "et.isfocused= "+v.isFocused()); } else Log.i("onCreate().EditText.onClickListener()", "the listener did'nt consume the event"); } }); 

J’espère que cela aidera certains d’entre vous!

Il suffit de trouver une autre vue et de lui donner la priorité.

 var refresher = FindViewById(Resource.Id.refresher); refresher.RequestFocus(); 

J’ai essayé beaucoup pour effacer la mise au point d’un texte d’édition. clearfocus () et focusable et d’autres choses n’ont jamais fonctionné pour moi. J’ai donc eu l’idée de laisser un faux edittext se concentrer:

       

puis dans votre code java:

 View view = Activity.this.getCurrentFocus(); if (view != null) { InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); fake.requestFocus(); } 

cela cachera le clavier et supprimera le focus de tout edittext qui le possède. et aussi que vous voyez le faux edittext est hors de l’écran et ne peut pas être vu

Il suffit d’inclure cette ligne

 android:selectAllOnFocus="false" 

dans le segment XML correspondant à la disposition EditText.

Vous devez simplement effacer le focus de la vue comme

 EditText.clearFocus() 

Si je comprends bien votre question, cela devrait vous aider:

 TextView tv1 = (TextView) findViewById(R.id.tv1); tv1 .setFocusable(false); 

Depuis que je suis dans un widget et pas dans une activité que j’ai faite:

`getRootView (). clearFocus ();

  

si la disposition parente Edittext est Linear puis ajoutez

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

comme ci-dessous

    ............ 

quand la disposition parent d’Edittext est relative alors

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

comme

    ............ 

Vous devez uniquement définir le ViewGroup avec l’atsortingbut:

android:focusableInTouchMode="true"

Le ViewGroup est la disposition qui inclut chaque vue enfant.