Wie kann ich in Android EditText
deutlich machen , wenn darauf geklickt wird?
ZB, wenn ich ein EditText
mit einigen Zeichen in habe, z. B. 'Enter Name'
wenn der Benutzer darauf klickt, verschwinden diese Zeichen.
Wie kann ich in Android EditText
deutlich machen , wenn darauf geklickt wird?
ZB, wenn ich ein EditText
mit einigen Zeichen in habe, z. B. 'Enter Name'
wenn der Benutzer darauf klickt, verschwinden diese Zeichen.
Antworten:
Ich bin nicht sicher, ob Sie danach sind, aber versuchen Sie dieses XML:
android:hint="Enter Name"
Dieser Text wird angezeigt, wenn das Eingabefeld leer, ausgewählt oder nicht ausgewählt ist.
Oder wenn Sie möchten, dass es genau so funktioniert, wie Sie es beschrieben haben, weisen Sie dem editText einen onClickListener zu und setzen Sie ihn mit setText () leer.
Suchen Sie ein ähnliches Verhalten wie das x, das auf der rechten Seite der Textfelder eines iPhones angezeigt wird und das den Text beim Tippen löscht? Dort heißt es clearButtonMode. So erstellen Sie dieselbe Funktionalität in einer Android EditText-Ansicht:
String 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.getIntrinsicWidth(), x.getIntrinsicHeight());
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.getIntrinsicWidth()) {
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().toString().equals("") ? null : x, null);
}
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
});
v.playSoundEffect(SoundEffectConstants.CLICK)
den onTouchListener hinzugefügt , um akustisches Feedback zu erhalten, wenn der Text entfernt wird.
Nach einem Klick auf eine Aktion führen Sie den folgenden Schritt aus
((EditText) findViewById(R.id.yoursXmlId)).setText("");
oder
Schreiben Sie dies in eine XML-Datei
<EditText
---------- other stuffs ------
android:hint="Enter Name" />
Es funktioniert gut für mich. Hoffe euch allen.
das heißt hinweis in android benutze android: Hinweis = "Name eingeben"
Die Antwort von @ Harris ist großartig. Ich habe sie als separate Unterklasse von EditText implementiert. Dies kann die Verwendung vereinfachen, wenn Ihr Code bereits TextChangedListeners hinzufügt.
Außerdem habe ich es so angepasst, dass wenn Sie bereits zusammengesetzte Drawables verwenden, diese intakt bleiben.
Code ist hier für alle, die ihn brauchen:
package com.companyname.your
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
public class ClearableEditText extends EditText {
public String defaultValue = "";
final Drawable imgX = getResources().getDrawable(android.R.drawable.presence_offline ); // X image
public ClearableEditText(Context context) {
super(context);
init();
}
public ClearableEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public ClearableEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
void init() {
// Set bounds of our X button
imgX.setBounds(0, 0, imgX.getIntrinsicWidth(), imgX.getIntrinsicHeight());
// 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.getIntrinsicWidth()) {
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().toString().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]);
}
}
Wenn Sie Text im Bearbeitungstext haben und ihn wie gesagt entfernen möchten, versuchen Sie Folgendes:
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().toString().compareTo("Enter Text")==0)
{
text_box.setText("");
}
}
}
});
Seien Sie vorsichtig, wenn Sie Text mit einem onClick-Listener in dem Feld festlegen, in dem Sie den Text festlegen. Ich habe dies getan und den Text auf eine leere Zeichenfolge gesetzt. Dies führte dazu, dass der Zeiger nach oben zeigte, wo sich mein Cursor befand, der normalerweise nach einigen Sekunden verschwindet. Wenn ich nicht darauf gewartet habe, dass es verschwindet, bevor ich meine Seite verlasse, wodurch finish () aufgerufen wird, würde dies einen Speicherverlust verursachen und meine App zum Absturz bringen. Ich habe eine Weile gebraucht, um herauszufinden, was den Absturz in diesem Fall verursacht hat.
Auf jeden Fall würde ich empfehlen, selectAll () in Ihrem On-Click-Listener anstelle von setText () zu verwenden, wenn Sie können. Auf diese Weise kann der Benutzer nach Auswahl des Textes mit der Eingabe beginnen und der gesamte vorherige Text wird gelöscht.
Bild des verdächtigen Zeigers: http://i.stack.imgur.com/juJnt.png
// Zum Löschen, wenn auf die Schaltfläche Löschen geklickt wird
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("");
}
});
Dies hilft dabei, die falschen Schlüsselwörter zu löschen, die Sie eingegeben haben. Anstatt immer wieder die Rücktaste zu drücken, können Sie einfach auf die Schaltfläche klicken, um alles zu löschen. Es hat bei mir funktioniert. Ich hoffe es hilft
Für mich der einfachste Weg ... Erstellen Sie einen öffentlichen EditText, zum Beispiel "myEditText1"
public EditText myEditText1;
Verbinden Sie es dann mit dem EditText, der gelöscht werden soll
myEditText1 = (EditText) findViewById(R.id.numberfield);
Erstellen Sie danach eine Leere, die auf einen Klick auf den EditText reagiert, und lassen Sie ihn beispielsweise den darin enthaltenen Text löschen, wenn er fokussiert ist
@OnClick(R.id.numberfield)
void textGone(){
if (myEditText1.isFocused()){
myEditText1.setText("");
}
}
Hoffe ich könnte dir helfen, wünsche allen einen schönen Tag