日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

自定义的Android EditText

發(fā)布時間:2023/12/18 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自定义的Android EditText 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這是一個指定EditText,在我們的實(shí)際開發(fā)中,可以直接拿來用就行了,先上圖看效果:

? ? ??

簡單介紹下:當(dāng)文本框有字符串時,在右邊會顯示一個清除的圖標(biāo)。點(diǎn)擊清除的圖標(biāo)可以清除文本框的內(nèi)容。

?

先上自定義編輯框代碼:代碼比較簡單,值得注意的是onTouchEvent方法。這個是一個觸摸事件,主要捕獲清除圖標(biāo),模擬點(diǎn)擊事件。

1 package cn.datian.customedit; 2 3 import android.content.Context; 4 import android.graphics.drawable.Drawable; 5 import android.text.Editable; 6 import android.text.TextWatcher; 7 import android.util.AttributeSet; 8 import android.view.MotionEvent; 9 import android.view.View; 10 import android.view.View.OnFocusChangeListener; 11 import android.view.animation.Animation; 12 import android.view.animation.CycleInterpolator; 13 import android.view.animation.TranslateAnimation; 14 import android.widget.EditText; 15 16 public class ClearEditText extends EditText implements OnFocusChangeListener, TextWatcher { 17 /** 18 * 刪除按鈕的引用 19 */ 20 private Drawable mClearDrawable; 21 22 /** 23 * 控件是否有焦點(diǎn) 24 */ 25 private boolean hasFoucs; 26 27 public ClearEditText(Context context) { 28 this(context, null); 29 } 30 31 public ClearEditText(Context context, AttributeSet attrs) { 32 // 這里構(gòu)造方法也很重要,不加這個很多屬性不能再XML里面定義 33 this(context, attrs, android.R.attr.editTextStyle); 34 } 35 36 public ClearEditText(Context context, AttributeSet attrs, int defStyle) { 37 super(context, attrs, defStyle); 38 init(); 39 } 40 41 private void init() { 42 // 獲取EditText的DrawableRight,假如沒有設(shè)置我們就使用默認(rèn)的圖片 43 mClearDrawable = getCompoundDrawables()[2]; 44 if (mClearDrawable == null) { 45 mClearDrawable = getResources().getDrawable(R.drawable.delete_selector); 46 } 47 mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), 48 mClearDrawable.getIntrinsicHeight()); 49 // 默認(rèn)設(shè)置隱藏圖標(biāo) 50 setClearIconVisible(false); 51 // 設(shè)置焦點(diǎn)改變的監(jiān)聽 52 setOnFocusChangeListener(this); 53 // 設(shè)置輸入框里面內(nèi)容發(fā)生改變的監(jiān)聽 54 addTextChangedListener(this); 55 } 56 57 /** 58 * 觸摸事件,此方法的目的是給清除圖標(biāo)一個觸摸事件(模擬點(diǎn)擊事件),當(dāng)觸摸到清除圖片的位置時,清除編輯框里面的內(nèi)容 59 * 捕獲清除圖標(biāo)位置的代碼:event.getX() > (getWidth() - getTotalPaddingRight()) 60 * && (event.getX() < ((getWidth() - getPaddingRight()))) 61 * 返回true表示觸摸到清除圖標(biāo),清除編輯框里面的內(nèi)容,返回false則不處理。 62 */ 63 @Override 64 public boolean onTouchEvent(MotionEvent event) { 65 if (event.getAction() == MotionEvent.ACTION_UP) { 66 if (getCompoundDrawables()[2] != null) { 67 68 boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight()) 69 && (event.getX() < ((getWidth() - getPaddingRight()))); 70 71 int r= getTotalPaddingRight(); 72 int r2 = getPaddingRight(); 73 if (touchable) { 74 this.setText(""); 75 } 76 } 77 } 78 79 return super.onTouchEvent(event); 80 } 81 82 /** 83 * 當(dāng)ClearEditText焦點(diǎn)發(fā)生變化的時候,判斷里面字符串長度設(shè)置清除圖標(biāo)的顯示與隱藏 84 */ 85 @Override 86 public void onFocusChange(View v, boolean hasFocus) { 87 this.hasFoucs = hasFocus; 88 if (hasFocus) { 89 setClearIconVisible(getText().length() > 0); 90 } else { 91 setClearIconVisible(false); 92 } 93 } 94 95 /** 96 * 設(shè)置清除圖標(biāo)的顯示與隱藏,調(diào)用setCompoundDrawables為EditText繪制上去 97 * 98 * @param visible 99 */ 100 protected void setClearIconVisible(boolean visible) { 101 Drawable right = visible ? mClearDrawable : null; 102 Drawable[] mDrawables = getCompoundDrawables(); 103 setCompoundDrawables(mDrawables[0], mDrawables[1], right, 104 mDrawables[3]); 105 } 106 107 /** 108 * 當(dāng)輸入框里面內(nèi)容發(fā)生變化的時候回調(diào)的方法 109 */ 110 @Override 111 public void onTextChanged(CharSequence s, int start, int count, int after) { 112 if (hasFoucs) { 113 setClearIconVisible(s.length() > 0); 114 } 115 } 116 117 /** 118 * 當(dāng)輸入框里面內(nèi)容發(fā)生變化之前回調(diào)的方法 119 */ 120 @Override 121 public void beforeTextChanged(CharSequence s, int start, int count, int after) { 122 123 } 124 125 /** 126 * 當(dāng)輸入框里面內(nèi)容發(fā)生變化之后回調(diào)的方法 127 */ 128 @Override 129 public void afterTextChanged(Editable s) { 130 131 } 132 133 /** 134 * 設(shè)置晃動動畫 135 */ 136 public void setShakeAnimation() { 137 this.setAnimation(shakeAnimation(5,300)); 138 } 139 140 /** 141 * 晃動動畫 142 * @param counts 晃動次數(shù) 143 * @param duration 晃動持續(xù)時間(毫秒) 144 * @return 145 */ 146 private Animation shakeAnimation(int counts,int duration) { 147 Animation translateAnimation = new TranslateAnimation(-1, 1, -1, 1); 148 translateAnimation.setInterpolator(new CycleInterpolator(counts)); 149 translateAnimation.setDuration(duration); 150 return translateAnimation; 151 } 152 }

?

布局XML代碼:

1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".MainActivity" 6 android:orientation="vertical" 7 > 8 <cn.datian.customedit.ClearEditText 9 android:id="@+id/et" 10 android:layout_width="match_parent" 11 android:layout_height="wrap_content" 12 android:background="@drawable/login_edittext_bg" 13 android:drawableRight="@drawable/delete_selector" 14 android:singleLine="true" 15 /> 16 <Button 17 android:id="@+id/button1" 18 android:layout_width="wrap_content" 19 android:layout_height="wrap_content" 20 android:text="Button" /> 21 22 </LinearLayout>

delete_selector和login_edittext_bg是選擇器:代碼如下

delete_selector選擇器代碼:

1 <?xml version="1.0" encoding="utf-8"?> 2 <selector 3 xmlns:android="http://schemas.android.com/apk/res/android"> 4 <item android:state_pressed="true" android:drawable="@drawable/search_clear_pressed" /> 5 <item android:drawable="@drawable/search_clear_normal" /> 6 </selector>

login_edittext_bg選擇器代碼:

1 <?xml version="1.0" encoding="UTF-8"?> 2 <selector xmlns:android="http://schemas.android.com/apk/res/android"> 3 <item android:state_focused="true" android:drawable="@drawable/login_edit_pressed"></item> 4 <item android:state_pressed="true" android:drawable="@drawable/login_edit_pressed"></item> 5 <item android:drawable="@drawable/login_edit_normal"></item> 6 </selector>

?

Activity代碼:

1 package cn.datian.customedit; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.view.View; 6 import android.widget.Button; 7 import android.widget.Toast; 8 9 public class MainActivity extends Activity { 10 11 private ClearEditText et; 12 @Override 13 protected void onCreate(Bundle savedInstanceState) { 14 super.onCreate(savedInstanceState); 15 setContentView(R.layout.activity_main); 16 17 Button btnLogin = (Button)this.findViewById(R.id.button1); 18 et = (ClearEditText)this.findViewById(R.id.et); 19 20 btnLogin.setOnClickListener(new View.OnClickListener() { 21 22 @Override 23 public void onClick(View v) { 24 String etStr = et.getText().toString(); 25 if(etStr.equals("") || etStr==null){ 26 //如果編輯框?yàn)榭盏脑?#xff0c;抖動提示 27 et.setShakeAnimation(); 28 Toast.makeText(MainActivity.this, "不能為空", Toast.LENGTH_SHORT).show(); 29 } 30 } 31 }); 32 } 33 }

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/datian/p/3822739.html

總結(jié)

以上是生活随笔為你收集整理的自定义的Android EditText的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。