国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android 帶有刪除按鈕的EditText

2019-12-12 05:11:40
字體:
供稿:網(wǎng)友

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描述:  * 自定義控件實(shí)現(xiàn)帶清除功能的EditText  *  * 學(xué)習(xí)資料:  * 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, "請(qǐng)輸入用戶名", Toast.LENGTH_SHORT).show();       }        if (TextUtils.isEmpty(mPassWordCleanableEditText.getText())) {         mPassWordCleanableEditText.setShakeAnimation();         Toast.makeText(MainActivity.this, "請(qǐng)輸入密碼", 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; /**  * 在焦點(diǎn)變化時(shí)和輸入內(nèi)容發(fā)生變化時(shí)均要判斷是否顯示右邊clean圖標(biāo)  */ 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     //即我們?cè)诓季治募性O(shè)置的android:drawableRight     mRightDrawable=drawables[2];            //設(shè)置焦點(diǎn)變化的監(jiān)聽     this.setOnFocusChangeListener(new FocusChangeListenerImpl());     //設(shè)置EditText文字變化的監(jiān)聽     this.addTextChangedListener(new TextWatcherImpl());     //初始化時(shí)讓右邊clean圖標(biāo)不可見     setClearDrawableVisible(false);   }         /**    * 當(dāng)手指抬起的位置在clean的圖標(biāo)的區(qū)域    * 我們將此視為進(jìn)行清除操作    * getWidth():得到控件的寬度    * event.getX():抬起時(shí)的坐標(biāo)(改坐標(biāo)是相對(duì)于控件本身而言的)    * getTotalPaddingRight():clean的圖標(biāo)左邊緣至控件右邊緣的距離    * getPaddingRight():clean的圖標(biāo)右邊緣至控件右邊緣的距離    * 于是:    * getWidth() - getTotalPaddingRight()表示:    * 控件左邊到clean的圖標(biāo)左邊緣的區(qū)域    * getWidth() - getPaddingRight()表示:    * 控件左邊到clean的圖標(biāo)右邊緣的區(qū)域    * 所以這兩者之間的區(qū)域剛好是clean的圖標(biāo)的區(qū)域    */   @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);       }     }        }      //當(dāng)輸入結(jié)束后判斷是否顯示右邊clean的圖標(biāo)   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的圖標(biāo)   protected void setClearDrawableVisible(boolean isVisible) {     Drawable rightDrawable;     if (isVisible) {       rightDrawable = mRightDrawable;     } else {       rightDrawable = null;     }     //使用代碼設(shè)置該控件left, top, right, and bottom處的圖標(biāo)     setCompoundDrawables(getCompoundDrawables()[0],getCompoundDrawables()[1],                 rightDrawable,getCompoundDrawables()[3]);   }     // 顯示一個(gè)動(dòng)畫,以提示用戶輸入   public void setShakeAnimation() {     this.setAnimation(shakeAnimation(5));   }    //CycleTimes動(dòng)畫重復(fù)的次數(shù)   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> 

以上就是對(duì)Android   帶有刪除按鈕的EditText的資料整理,后續(xù)繼續(xù)補(bǔ)充相關(guān)資料,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大厂| 永吉县| 大厂| 高邮市| 吉隆县| 龙游县| 铜川市| 铜山县| 靖安县| 分宜县| 江门市| 简阳市| 通化市| 衡阳市| 定远县| 库伦旗| 岗巴县| 吴桥县| 夏河县| 铜山县| 济宁市| 江川县| 海安县| 禄劝| 旌德县| 张掖市| 陈巴尔虎旗| 许昌县| 常宁市| 汪清县| 营山县| 田阳县| 河南省| 辽阳县| 吐鲁番市| 横峰县| 四子王旗| 特克斯县| 万山特区| 凉城县| 固阳县|