Android 带有删除按钮的EditText

MainActivity如下:

package cc.textview5; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity; /** * Demo描述: * 自定义控件实现带清除功能的EditText * * 学习资料: * http://blog.csdn.net/xiaanming/article/details/11066685 * * Thank you very much */ public class MainActivity extends Activity { private CleanableEditText mUserNameCleanableEditText; private CleanableEditText mPassWordCleanableEditText; private Button mLoginButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); init(); } private void init(){ mUserNameCleanableEditText=(CleanableEditText) findViewById(R.id.userNameEditText); mPassWordCleanableEditText=(CleanableEditText) findViewById(R.id.passwordEditText); mLoginButton=(Button) findViewById(R.id.loginButton); mLoginButton.setOnClickListener(new OnClickListenerImpl()); } private class OnClickListenerImpl implements OnClickListener { @Override public void onClick(View view) { if (TextUtils.isEmpty(mUserNameCleanableEditText.getText())) { mUserNameCleanableEditText.setShakeAnimation(); Toast.makeText(MainActivity.this, "请输入用户名", Toast.LENGTH_SHORT).show(); } if (TextUtils.isEmpty(mPassWordCleanableEditText.getText())) { mPassWordCleanableEditText.setShakeAnimation(); Toast.makeText(MainActivity.this, "请输入密码", Toast.LENGTH_SHORT).show(); } } } }

CleanableEditText如下:

package cc.textview5; 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.view.animation.Animation; import android.view.animation.CycleInterpolator; import android.view.animation.TranslateAnimation; import android.widget.EditText; /** * 在焦点变化时和输入内容发生变化时均要判断是否显示右边clean图标 */ public class CleanableEditText extends EditText { private Drawable mRightDrawable; private boolean isHasFocus; public CleanableEditText(Context context) { super(context); init(); } public CleanableEditText(Context context, AttributeSet attrs) { super(context, attrs); init(); } public CleanableEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init(){ //getCompoundDrawables: //Returns drawables for the left, top, right, and bottom borders. Drawable [] drawables=this.getCompoundDrawables(); //取得right位置的Drawable //即我们在布局文件中设置的android:drawableRight mRightDrawable=drawables[2]; //设置焦点变化的监听 this.setOnFocusChangeListener(new FocusChangeListenerImpl()); //设置EditText文字变化的监听 this.addTextChangedListener(new TextWatcherImpl()); //初始化时让右边clean图标不可见 setClearDrawableVisible(false); } /** * 当手指抬起的位置在clean的图标的区域 * 我们将此视为进行清除操作 * getWidth():得到控件的宽度 * event.getX():抬起时的坐标(改坐标是相对于控件本身而言的) * getTotalPaddingRight():clean的图标左边缘至控件右边缘的距离 * getPaddingRight():clean的图标右边缘至控件右边缘的距离 * 于是: * getWidth() - getTotalPaddingRight()表示: * 控件左边到clean的图标左边缘的区域 * getWidth() - getPaddingRight()表示: * 控件左边到clean的图标右边缘的区域 * 所以这两者之间的区域刚好是clean的图标的区域 */ @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: boolean isClean =(event.getX() > (getWidth() - getTotalPaddingRight()))&& (event.getX() < (getWidth() - getPaddingRight())); if (isClean) { setText(""); } break; default: break; } return super.onTouchEvent(event); } private class FocusChangeListenerImpl implements OnFocusChangeListener{ @Override public void onFocusChange(View v, boolean hasFocus) { isHasFocus=hasFocus; if (isHasFocus) { boolean isVisible=getText().toString().length()>=1; setClearDrawableVisible(isVisible); } else { setClearDrawableVisible(false); } } } //当输入结束后判断是否显示右边clean的图标 private class TextWatcherImpl implements TextWatcher{ @Override public void afterTextChanged(Editable s) { boolean isVisible=getText().toString().length()>=1; setClearDrawableVisible(isVisible); } @Override public void beforeTextChanged(CharSequence s, int start, int count,int after) { } @Override public void onTextChanged(CharSequence s, int start, int before,int count) { } } //隐藏或者显示右边clean的图标 protected void setClearDrawableVisible(boolean isVisible) { Drawable rightDrawable; if (isVisible) { rightDrawable = mRightDrawable; } else { rightDrawable = null; } //使用代码设置该控件left, top, right, and bottom处的图标 setCompoundDrawables(getCompoundDrawables()[0],getCompoundDrawables()[1], rightDrawable,getCompoundDrawables()[3]); } // 显示一个动画,以提示用户输入 public void setShakeAnimation() { this.setAnimation(shakeAnimation(5)); } //CycleTimes动画重复的次数 public Animation shakeAnimation(int CycleTimes) { Animation translateAnimation = new TranslateAnimation(0, 10, 0, 10); translateAnimation.setInterpolator(new CycleInterpolator(CycleTimes)); translateAnimation.setDuration(1000); return translateAnimation; } }

main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="20dip" android:paddingRight="20dip" > <cc.textview5.CleanableEditText android:id="@+id/userNameEditText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="username" android:layout_marginTop="30dip" android:drawableLeft="@drawable/icon_user" android:drawableRight="@drawable/clean_selector" /> <cc.textview5.CleanableEditText android:id="@+id/passwordEditText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="password" android:password="true" android:layout_marginTop="100dip" android:drawableLeft="@drawable/account_icon" android:drawableRight="@drawable/clean_selector" /> <Button android:id="@+id/loginButton" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Login" android:layout_marginTop="155dip" /> </RelativeLayout>

以上就是对Android   带有删除按钮的EditText的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

时间: 2025-01-30 06:09:16

Android 带有删除按钮的EditText的相关文章

Android 带有删除按钮的EditText_Android

MainActivity如下: package cc.textview5; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity;

Android实现带有删除按钮的EditText示例代码_Android

一.首先来看看效果 这是一个带有删除按钮的输入文本框, 需要新建一个类继承自EditText, 先把代码贴出来, 然后在解释: 示例代码如下: public class EditTextWithDel extends EditText { private final static String TAG = "EditTextWithDel"; private Drawable imgInable; private Context mContext; public EditTextWit

Android实现带有删除按钮的EditText示例代码

一.首先来看看效果 这是一个带有删除按钮的输入文本框, 需要新建一个类继承自EditText, 先把代码贴出来, 然后在解释: 示例代码如下: public class EditTextWithDel extends EditText { private final static String TAG = "EditTextWithDel"; private Drawable imgInable; private Context mContext; public EditTextWit

Android自定义View示例(一)—带有删除按钮的EditText

MainActivity如下: package cc.textview5; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; import android.app.Activity;

自定义带删除按钮的EditText

在做这个小的控件的时候,其实我知道网上已经有很多了,但是还是想照自己的思路,亲手写下,功能很简单: 就是    (1)在EditText没有输入内容的时候隐藏删除按钮 (2 )在输入内容的使用显示删除按钮 (3 )在点击删除按钮的时候  ,如果是点击的话删除一个字符,如果是长按的话按照一定的速度一个一个删除,删除每一个字符以后光标必须在最后 看下效果图: 基本上就这几点,实现起来很简单,我没有通过Extends EditText  来实现,使用的是布局.         要注意的是  (1)长按

Android实现自定义带删除功能的EditText实例

1.说明 自定义带删除功能的EditText有两种方法,第一种是用组合视图的方法,即在一个view视图里面左侧放置一个EditText,右侧放置一个ImageView,但是这样增加了视图的层次,而且对输入内容的长度要做一定的处理. 第二种是重新定义EditText组件,增加相应的事件处理,即可达到很好的效果,效果图如下: 2.ClearEditText的JAVA类文件 /** * @说明: 自定义带删除按钮的EditText * */ public class ClearEditText ext

android viewpager里面的一张图片长按跳出删除按钮,可以删除这张图片

问题描述 android viewpager里面的一张图片长按跳出删除按钮,可以删除这张图片 android viewpager里面的一张图片长按跳出删除按钮,可以删除这张图片 viewpager的填充类如下 protected class SamplePagerAdapter extends PagerAdapter { private LayoutInflater inflater; private int position1 = 0; SamplePagerAdapter() { infl

Android ListView实现仿iPhone实现左滑删除按钮的简单实例

需要自定义ListView.这里就交FloatDelListView吧. 复写onTouchEvent方法.如下: @Override public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN:<BR> // 获取按下的条目视图(child view) int childCount = getChildCount(); int[] listViewCo

android li...-安卓外部控制ListView内部的一个删除按钮的显示与隐藏该怎么做

问题描述 安卓外部控制ListView内部的一个删除按钮的显示与隐藏该怎么做 比如说在标题栏有一个编辑按钮,当点击编辑时listView所有Item内部的删除Button显示,编辑变成完成,点击完成时所有的删除按钮隐藏. 我做出来的效果只能是listview中的第一行删除button显示与隐藏,其它行并没有出现button,我觉得是不是得在getview中对list view做点啥?请高手帮帮忙-先谢谢了. 解决方案 之前遇到过类似的需求,做法仅供参考. listView的Adapter中添加一