zoukankan      html  css  js  c++  java
  • android自定义文本框,后面带清空按钮

    android常见的带清空按钮的文本框,获得焦点时如果有内容则显示,否则不显示

    package com.qc.health.weight;

    import com.qc.health.R;

    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.graphics.Rect;
    import android.graphics.drawable.Drawable;
    import android.text.Editable;
    import android.text.TextWatcher;
    import android.util.AttributeSet;
    import android.view.MotionEvent;
    import android.widget.EditText;

    public class MyEditText extends EditText {
    private final String TAG = "MyEditText";
    private Drawable dRight;
    private Rect rBounds;

    // 构造器
    public MyEditText(Context paramContext) {
    super(paramContext);
    initEditText();
    }

    public MyEditText(Context paramContext, AttributeSet paramAttributeSet) {
    super(paramContext, paramAttributeSet);
    initEditText();
    }

    public MyEditText(Context paramContext, AttributeSet paramAttributeSet,
    int paramInt) {
    super(paramContext, paramAttributeSet, paramInt);
    initEditText();
    }

    // 初始化edittext 控件
    @SuppressLint("ResourceAsColor")
    private void initEditText() {
    setEditTextDrawable();
    this.setBackgroundResource(R.drawable.edittext_bg);
    this.setTextColor(R.color.login_txt);
    this.setHintTextColor(R.color.login_remind_txt);
    this.setPadding(20, 3, 6, 3);
    this.setTextSize(14);
    this.setSingleLine(true);
    addTextChangedListener(new TextWatcher() { // 对文本内容改变进行监听
    public void afterTextChanged(Editable paramEditable) {
    }

    public void beforeTextChanged(CharSequence paramCharSequence,
    int paramInt1, int paramInt2, int paramInt3) {
    }

    public void onTextChanged(CharSequence paramCharSequence,
    int paramInt1, int paramInt2, int paramInt3) {
    MyEditText.this.setEditTextDrawable();
    }
    });
    }

    // 控制图片的显示
    private void setEditTextDrawable() {
    if (getText().toString().length() == 0){
    setCompoundDrawables(null, null, null, null);
    } else {
    setCompoundDrawables(null, null, this.dRight, null);
    }
    }

    //失去焦点事件
    @Override
    protected void onFocusChanged(boolean focused, int direction,
    Rect previouslyFocusedRect) {
    //获得焦点,判断是否有内容
    if (this.hasFocus() == true) {
    //如果没有内容,则保护显示清空按钮,否则就显示
    if (getText().toString().length() == 0){
    setCompoundDrawables(null, null, null, null);
    } else {
    setCompoundDrawables(null, null, this.dRight, null);
    }
    }else{
    //失去焦点,隐藏按钮
    setCompoundDrawables(null, null, null, null);
    }
    super.onFocusChanged(focused, direction, previouslyFocusedRect);
    }

    protected void finalize() throws Throwable {
    super.finalize();
    this.dRight = null;
    this.rBounds = null;
    }

    // 添加触摸事件
    @SuppressWarnings("unused")
    public boolean onTouchEvent(MotionEvent paramMotionEvent) {
    if ((this.dRight != null) && (paramMotionEvent.getAction() == 1) && getText().toString().length() > 0) {
    this.rBounds = this.dRight.getBounds();
    int i = (int) paramMotionEvent.getX();
    int ix = (int) paramMotionEvent.getRawX();
    // int e = (int)this.getX();
    // int ex = (int)this.getRotationX();
    int width = this.getWidth();
    int left = (int)this.getLeft();
    int right = (int)this.getRight();
    // int marginWidth = right - this.rBounds.width()-10;
    int marginWidth = width - this.rBounds.width()-5;
    // int marginWidth = i - (getRight() - 3 * (this.rBounds.width()+10));
    // if (marginWidth > -40 && marginWidth < 40) {
    if (marginWidth < i && i <= width) {
    setText("");
    paramMotionEvent.setAction(MotionEvent.ACTION_CANCEL);
    }
    }
    return super.onTouchEvent(paramMotionEvent);
    }

    // 设置显示的图片资源
    public void setCompoundDrawables(Drawable paramDrawable1,
    Drawable paramDrawable2, Drawable paramDrawable3,
    Drawable paramDrawable4) {
    if (paramDrawable3 != null)
    this.dRight = paramDrawable3;
    super.setCompoundDrawables(paramDrawable1, paramDrawable2,
    paramDrawable3, paramDrawable4);
    }
    }

    注意使用的时候是这样的

    <com.qc.health.weight.MyEditText
    android:id="@id/login_etUserNameId"
    android:layout_width="200dp"
    android:layout_height="35dp"
    android:layout_gravity="center"
    android:layout_marginLeft="5dp"
    android:drawableRight="@drawable/del"
    android:hint="@string/login_et_account_txt" />

    android:drawableRight="@drawable/del"这个属性是必带的,是清空按钮的图片

  • 相关阅读:
    html JS 开发备忘
    C++学习备忘(一)
    博客开通备忘
    自己制作的代码生成工具AutoCoder
    C# 小技巧
    突破list存为模板为10M限制
    开博
    OpenEuler中C语言中的函数调用测试
    socket测试3
    电子公文传输系统验收4开发基础
  • 原文地址:https://www.cnblogs.com/qc-huihui/p/3513222.html
Copyright © 2011-2022 走看看