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描述: * 自定義控件實(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)輸入用戶(hù)名", 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)聽(tīng) this.setOnFocusChangeListener(new FocusChangeListenerImpl()); //設(shè)置EditText文字變化的監(jiān)聽(tīng) this.addTextChangedListener(new TextWatcherImpl()); //初始化時(shí)讓右邊clean圖標(biāo)不可見(jiàn) 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)畫(huà),以提示用戶(hù)輸入 public void setShakeAnimation() { this.setAnimation(shakeAnimation(5)); } //CycleTimes動(dòng)畫(huà)重復(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ì)本站的支持!
- Android 自定義EditText輸入框帶清空按鈕
- Android實(shí)現(xiàn)帶有刪除按鈕的EditText示例代碼
- Android如何自定義EditText下劃線?
- Android EditText自定義樣式的方法
- Android UI設(shè)計(jì)系列之自定義EditText實(shí)現(xiàn)帶清除功能的輸入框(3)
- Android自定義EditText右側(cè)帶圖片控件
- Android中自定義的dialog中的EditText無(wú)法彈出輸入法解決方案
- Android如何自定義EditText光標(biāo)與下劃線顏色詳解
- Android實(shí)現(xiàn)自定義帶刪除功能的EditText實(shí)例
- Android開(kāi)發(fā)實(shí)現(xiàn)帶清空按鈕的EditText示例
相關(guān)文章
Android快速開(kāi)發(fā)之定制BaseTemplate
這篇文章主要為大家詳細(xì)介紹了Android快速開(kāi)發(fā)之定制BaseTemplate的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02android實(shí)現(xiàn)簡(jiǎn)易計(jì)算器
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)簡(jiǎn)易計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07Android實(shí)現(xiàn)多次閃退清除數(shù)據(jù)
這篇文章主要介紹了Android實(shí)現(xiàn)多次閃退清除數(shù)據(jù)的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-04-04Android實(shí)現(xiàn)獲取短信驗(yàn)證碼并自動(dòng)填寫(xiě)功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)獲取短信驗(yàn)證碼并自動(dòng)填寫(xiě)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Android基于騰訊云實(shí)時(shí)音視頻仿微信視頻通話最小化懸浮
這篇文章主要為大家詳細(xì)介紹了Android基于騰訊云實(shí)時(shí)音視頻實(shí)現(xiàn)類(lèi)似微信視頻通話最小化懸浮,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11android 判斷網(wǎng)絡(luò)是否可用與連接的網(wǎng)絡(luò)是否能上網(wǎng)
下面小編就為大家分享一篇android 判斷網(wǎng)絡(luò)是否可用與連接的網(wǎng)絡(luò)是否能上網(wǎng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01