在Android中,如何EditText
清除它的单击时间?
例如,如果我输入了EditText
,其中包含一些字符,例如'Enter Name'
,当用户单击它时,这些字符就会消失。
在Android中,如何EditText
清除它的单击时间?
例如,如果我输入了EditText
,其中包含一些字符,例如'Enter Name'
,当用户单击它时,这些字符就会消失。
Answers:
您是否正在寻找与iphone上文本字段右侧显示的x相似的行为,以便在点击时清除文本?那里叫做clearButtonMode。这是在Android EditText视图中创建相同功能的方法:
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)
当删除文本时,我还向onTouchListener添加了一些含蓄的反馈。
在单击任何动作后,请执行以下步骤
((EditText) findViewById(R.id.yoursXmlId)).setText("");
要么
将其写入XML文件
<EditText
---------- other stuffs ------
android:hint="Enter Name" />
它对我来说很好。希望大家。
在android中被称为提示使用android:hint =“输入名称”
@Harris的答案很好,我已将其实现为EditText的单独子类,如果您的代码已添加TextChangedListeners,则可以更轻松地使用它。
另外,我还对其进行了调整,以便在您已经使用任何“复合可绘制对象”的情况下,将它们完整保留。
代码在这里,适合任何需要它的人:
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]);
}
}
如果要在编辑文本中包含文本,然后按照您说的删除它,请尝试:
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("");
}
}
}
});
在您要设置文本的字段上使用onClick侦听器设置文本时要小心。我正在这样做,并将文本设置为空字符串。这导致指针向上指示我的光标在哪里,通常在几秒钟后消失。当我不等它离开页面而导致finish()被调用之前消失时,它将导致内存泄漏并使我的应用程序崩溃。花了我一段时间才弄清楚是什么原因导致此崩溃。
无论如何,我建议您在点击监听器中使用selectAll(),而不是setText()。这样,一旦选择了文本,用户就可以开始键入并且所有先前的文本都将被清除。
可疑指针的图片:http : //i.stack.imgur.com/juJnt.png
//当单击清除按钮时清除
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("");
}
});
这将有助于清除您输入的错误关键字,因此您无需反复按Backspace键,只需单击按钮即可清除所有内容。希望能帮助到你
对我来说,最简单的方法是...创建一个公共的EditText,例如“ myEditText1”
public EditText myEditText1;
然后,将其与应清除的EditText连接
myEditText1 = (EditText) findViewById(R.id.numberfield);
在那之后,创建一个空隙,对单击EditText做出反应,让它在聚焦时清除其中的Text,例如
@OnClick(R.id.numberfield)
void textGone(){
if (myEditText1.isFocused()){
myEditText1.setText("");
}
}
希望我能为您提供帮助,大家度过愉快的一天