Dans Android, comment puis-je EditText
un EditText
lorsqu’il est cliqué?
Par exemple, si j’ai un EditText
contenant des caractères, tels que 'Enter Name'
, lorsque l’utilisateur clique dessus, ces caractères disparaissent.
Je ne sais pas si vous êtes après cela, mais essayez ce XML:
android:hint="Enter Name"
Il affiche ce texte lorsque le champ de saisie est vide, sélectionné ou non sélectionné.
Ou si vous voulez qu’il fasse exactement ce que vous avez décrit, assignez un onClickListener au editText et définissez-le vide avec setText ().
Recherchez-vous un comportement similaire au x qui apparaît sur le côté droit des champs de texte sur un iphone qui efface le texte lorsqu’il est tapé? C’est ce qu’on appelle clearButtonMode. Voici comment créer cette même fonctionnalité dans une vue EditText Android:
Ssortingng value = "";//any text you are pre-filling in the EditText final EditText et = new EditText(this); et.setText(value); final Drawable x = getResources().getDrawable(R.drawable.presence_offline);//your x image, this one from standard android images looks pretty good actually x.setBounds(0, 0, x.getInsortingnsicWidth(), x.getInsortingnsicHeight()); et.setCompoundDrawables(null, null, value.equals("") ? null : x, null); et.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (et.getCompoundDrawables()[2] == null) { return false; } if (event.getAction() != MotionEvent.ACTION_UP) { return false; } if (event.getX() > et.getWidth() - et.getPaddingRight() - x.getInsortingnsicWidth()) { et.setText(""); et.setCompoundDrawables(null, null, null, null); } return false; } }); et.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { et.setCompoundDrawables(null, null, et.getText().toSsortingng().equals("") ? null : x, null); } @Override public void afterTextChanged(Editable arg0) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } });
après onclick de toute action faire ci-dessous étape
((EditText) findViewById(R.id.yoursXmlId)).setText("");
ou
écris ceci dans un fichier XML
cela fonctionne bien pour moi. J’espère à vous tous.
La réponse de @ Harris est excellente, je l’ai implémentée en tant que sous-classe distincte de EditText, ce qui peut faciliter son utilisation si votre code ajoute déjà TextChangedListeners.
De plus, je l’ai modifié pour que, si vous utilisez déjà des Drawable Drawables, cela les laisse intacts.
Le code est ici pour quiconque en a besoin:
package com.companyname.your import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Editable; import android.text.TextWatcher; import android.util.AtsortingbuteSet; import android.view.MotionEvent; import android.view.View; import android.widget.EditText; public class ClearableEditText extends EditText { public Ssortingng defaultValue = ""; final Drawable imgX = getResources().getDrawable(android.R.drawable.presence_offline ); // X image public ClearableEditText(Context context) { super(context); init(); } public ClearableEditText(Context context, AtsortingbuteSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public ClearableEditText(Context context, AtsortingbuteSet attrs) { super(context, attrs); init(); } void init() { // Set bounds of our X button imgX.setBounds(0, 0, imgX.getInsortingnsicWidth(), imgX.getInsortingnsicHeight()); // There may be initial text in the field, so we may need to display the button manageClearButton(); this.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { ClearableEditText et = ClearableEditText.this; // Is there an X showing? if (et.getCompoundDrawables()[2] == null) return false; // Only do this for up touches if (event.getAction() != MotionEvent.ACTION_UP) return false; // Is touch on our clear button? if (event.getX() > et.getWidth() - et.getPaddingRight() - imgX.getInsortingnsicWidth()) { et.setText(""); ClearableEditText.this.removeClearButton(); } return false; } }); this.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { ClearableEditText.this.manageClearButton(); } @Override public void afterTextChanged(Editable arg0) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } }); } void manageClearButton() { if (this.getText().toSsortingng().equals("") ) removeClearButton(); else addClearButton(); } void addClearButton() { this.setCompoundDrawables(this.getCompoundDrawables()[0], this.getCompoundDrawables()[1], imgX, this.getCompoundDrawables()[3]); } void removeClearButton() { this.setCompoundDrawables(this.getCompoundDrawables()[0], this.getCompoundDrawables()[1], null, this.getCompoundDrawables()[3]); } }
qui est appelé indice dans Android utiliser Android: hint = “Enter Name”
Si vous voulez avoir du texte dans le texte d’édition et le supprimer comme vous le dites, essayez:
final EditText text_box = (EditText) findViewById(R.id.input_box); text_box.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus==true) { if (text_box.getText().toSsortingng().compareTo("Enter Text")==0) { text_box.setText(""); } } } });
Soyez prudent lorsque vous définissez du texte avec un écouteur onClick sur le champ que vous définissez le texte. Je faisais cela et définissais le texte sur une chaîne vide. Cela faisait apparaître le pointeur pour indiquer où se trouvait mon curseur, qui disparaît normalement après quelques secondes. Lorsque je n’attendais pas qu’il disparaisse avant de laisser ma page provoquer l’appel de finish (), cela provoquerait une fuite de mémoire et planterait mon application. Il m’a fallu du temps pour comprendre ce qui causait le crash sur celui-ci.
Quoi qu’il en soit, je vous recommande d’utiliser selectAll () dans votre écouteur clics plutôt que setText () si vous le pouvez. De cette façon, une fois le texte sélectionné, l’utilisateur peut commencer à taper et tout le texte précédent sera effacé.
photo du pointeur suspect: http://soffr.miximages.com/android/juJnt.png
// Pour effacer lorsque le bouton Effacer est cliqué
firstName = (EditText) findViewById (R.id.firstName);
clear = (Button) findViewById(R.id.clearsearchSubmit); clear.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (v.getId() == R.id.clearsearchSubmit); firstName.setText(""); } });
Cela vous aidera à effacer les mauvais mots-clés que vous avez tapés, donc au lieu d’appuyer à nouveau sur la touche Retour arrière, vous pouvez simplement cliquer sur le bouton pour tout effacer. J’espère que cela aide
Code pour effacer le champ de texte lorsque vous cliquez dessus
public void TextFieldClicked(View view){ if(view.getId()==R.id.editText1); text.setText(""); }
((EditText) findViewById(R.id.User)).setText(""); ((EditText) findViewById(R.id.Password)).setText("");
Pour moi le moyen le plus simple … Créer un EditText public, par exemple “myEditText1”
public EditText myEditText1;
Ensuite, connectez-le avec le EditText qui devrait être effacé
myEditText1 = (EditText) findViewById(R.id.numberfield);
Après cela, créez un vide qui réagit à un clic sur EditText et laissez-le effacer le texte à l’intérieur quand il est focalisé, par exemple
@OnClick(R.id.numberfield) void textGone(){ if (myEditText1.isFocused()){ myEditText1.setText(""); } }
J’espère que je pourrais vous aider, bonne journée à tous