最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 帶清除功能的輸入框控件實例詳解

 更新時間:2017年06月02日 10:14:29   作者:bzlj2912009596  
這篇文章主要介紹了Android 帶清除功能的輸入框控件實例詳解的相關(guān)資料,需要的朋友可以參考下

Android 帶清除功能的輸入框控件實例詳解

今天,看到一個很好的自定義輸入框控件,于是記錄一下。

效果很好:

一,自定義一個類,名為ClearEditText

package com.example.clearedittext; 
 
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.View.OnFocusChangeListener; 
import android.view.animation.Animation; 
import android.view.animation.CycleInterpolator; 
import android.view.animation.TranslateAnimation; 
import android.widget.EditText; 
 
public class ClearEditText extends EditText implements  
    OnFocusChangeListener, TextWatcher {  
  /** 
   * 刪除按鈕的引用 
   */ 
  private Drawable mClearDrawable;  
  /** 
   * 控件是否有焦點 
   */ 
  private boolean hasFoucs; 
  
  public ClearEditText(Context context) {  
    this(context, null);  
  }  
  
  public ClearEditText(Context context, AttributeSet attrs) {  
    //這里構(gòu)造方法也很重要,不加這個很多屬性不能再XML里面定義 
    this(context, attrs, android.R.attr.editTextStyle);  
  }  
   
  public ClearEditText(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(); 
  } 
   
   
  private void init() {  
    //獲取EditText的DrawableRight,假如沒有設(shè)置我們就使用默認(rèn)的圖片 
    mClearDrawable = getCompoundDrawables()[2];  
    if (mClearDrawable == null) {  
//     throw new NullPointerException("You can add drawableRight attribute in XML"); 
      mClearDrawable = getResources().getDrawable(R.drawable.delete_selector);  
    }  
     
    mClearDrawable.setBounds(0, 0, mClearDrawable.getIntrinsicWidth(), mClearDrawable.getIntrinsicHeight());  
    //默認(rèn)設(shè)置隱藏圖標(biāo) 
    setClearIconVisible(false);  
    //設(shè)置焦點改變的監(jiān)聽 
    setOnFocusChangeListener(this);  
    //設(shè)置輸入框里面內(nèi)容發(fā)生改變的監(jiān)聽 
    addTextChangedListener(this);  
  }  
  
  
  /** 
   * 因為我們不能直接給EditText設(shè)置點擊事件,所以我們用記住我們按下的位置來模擬點擊事件 
   * 當(dāng)我們按下的位置 在 EditText的寬度 - 圖標(biāo)到控件右邊的間距 - 圖標(biāo)的寬度 和 
   * EditText的寬度 - 圖標(biāo)到控件右邊的間距之間我們就算點擊了圖標(biāo),豎直方向就沒有考慮 
   */ 
  @Override  
  public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_UP) { 
      if (getCompoundDrawables()[2] != null) { 
 
        boolean touchable = event.getX() > (getWidth() - getTotalPaddingRight()) 
            && (event.getX() < ((getWidth() - getPaddingRight()))); 
         
        if (touchable) { 
          this.setText(""); 
        } 
      } 
    } 
 
    return super.onTouchEvent(event); 
  } 
  
  /** 
   * 當(dāng)ClearEditText焦點發(fā)生變化的時候,判斷里面字符串長度設(shè)置清除圖標(biāo)的顯示與隱藏 
   */ 
  @Override  
  public void onFocusChange(View v, boolean hasFocus) {  
    this.hasFoucs = hasFocus; 
    if (hasFocus) {  
      setClearIconVisible(getText().length() > 0);  
    } else {  
      setClearIconVisible(false);  
    }  
  }  
  
  
  /** 
   * 設(shè)置清除圖標(biāo)的顯示與隱藏,調(diào)用setCompoundDrawables為EditText繪制上去 
   * @param visible 
   */ 
  protected void setClearIconVisible(boolean visible) {  
    Drawable right = visible ? mClearDrawable : null;  
    setCompoundDrawables(getCompoundDrawables()[0],  
        getCompoundDrawables()[1], right, getCompoundDrawables()[3]);  
  }  
    
   
  /** 
   * 當(dāng)輸入框里面內(nèi)容發(fā)生變化的時候回調(diào)的方法 
   */ 
  @Override  
  public void onTextChanged(CharSequence s, int start, int count,  
      int after) {  
        if(hasFoucs){ 
          setClearIconVisible(s.length() > 0); 
        } 
  }  
  
  @Override  
  public void beforeTextChanged(CharSequence s, int start, int count,  
      int after) {  
      
  }  
  
  @Override  
  public void afterTextChanged(Editable s) {  
      
  }  
   
   
  /** 
   * 設(shè)置晃動動畫 
   */ 
  public void setShakeAnimation(){ 
    this.setAnimation(shakeAnimation(5)); 
  } 
   
   
  /** 
   * 晃動動畫 
   * @param counts 1秒鐘晃動多少下 
   * @return 
   */ 
  public static Animation shakeAnimation(int counts){ 
    Animation translateAnimation = new TranslateAnimation(0, 10, 0, 0); 
    translateAnimation.setInterpolator(new CycleInterpolator(counts)); 
    translateAnimation.setDuration(1000); 
    return translateAnimation; 
  } 
  
  
} 

里面設(shè)置點擊與輸入的監(jiān)聽的代碼,

setClearIconVisible()方法,設(shè)置隱藏和顯示清除圖標(biāo)的方法,我們這里不是調(diào)用setVisibility()方法,setVisibility()這個方法是針對View的,我們可以調(diào)用setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom)來設(shè)置上下左右的圖標(biāo)

setOnFocusChangeListener(this) 為輸入框設(shè)置焦點改變監(jiān)聽,如果輸入框有焦點,我們判斷輸入框的值是否為空,為空就隱藏清除圖標(biāo),否則就顯示

addTextChangedListener(this) 為輸入框設(shè)置內(nèi)容改變監(jiān)聽,其實很簡單呢,當(dāng)輸入框里面的內(nèi)容發(fā)生改變的時候,我們需要處理顯示和隱藏清除小圖標(biāo),里面的內(nèi)容長度不為0我們就顯示,否是就隱藏,但這個需要輸入框有焦點我們才改變顯示或者隱藏,為什么要需要焦點,比如我們一個登陸界面,我們保存了用戶名和密碼,在登陸界面onCreate()的時候,我們把我們保存的密碼顯示在用戶名輸入框和密碼輸入框里面,輸入框里面內(nèi)容發(fā)生改變,導(dǎo)致用戶名輸入框和密碼輸入框里面的清除小圖標(biāo)都顯示了,這顯然不是我們想要的效果,所以加了一個是否有焦點的判斷

setShakeAnimation(),這個方法是輸入框左右抖動的方法,之前我在某個應(yīng)用看到過類似的功能,當(dāng)用戶名錯誤,輸入框就在哪里抖動,感覺挺好玩的,其實主要是用到一個移動動畫,然后設(shè)置動畫的變化率為正弦曲線
然后直接在布局文件使用就可以了。使用的效果


Android 帶清除功能的輸入框控件就講完了。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • flutter局部刷新的實現(xiàn)示例

    flutter局部刷新的實現(xiàn)示例

    這篇文章主要介紹了flutter局部刷新的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • AFURLSessionManager 上傳下載使用代碼說明

    AFURLSessionManager 上傳下載使用代碼說明

    本文通過代碼給大家介紹了AFURLSessionManager 上傳下載使用說明,代碼簡單易懂,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • Flutter利用ORM框架管理數(shù)據(jù)庫詳解

    Flutter利用ORM框架管理數(shù)據(jù)庫詳解

    使用?ORM?框架最大的好處是簡化了數(shù)據(jù)庫維護的代碼量,使得我們可以專注于業(yè)務(wù)代碼實現(xiàn)。本篇,我們看看如何使用ORM框架管理數(shù)據(jù)庫版本遷移,需要的可以參考一下
    2023-04-04
  • Android條紋進度條的實現(xiàn)(調(diào)整view寬度仿進度條)

    Android條紋進度條的實現(xiàn)(調(diào)整view寬度仿進度條)

    這篇文章主要給大家介紹了關(guān)于Android實現(xiàn)條紋進度條的方法,主要是通過調(diào)整view寬度仿進度條,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2018-09-09
  • android自定義ListView實現(xiàn)底部View自動隱藏和消失的功能

    android自定義ListView實現(xiàn)底部View自動隱藏和消失的功能

    本篇文章主要介紹了android自定義ListView實現(xiàn)底部View自動隱藏和消失的功能 ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Android實現(xiàn)圓形圖片的兩種方式

    Android實現(xiàn)圓形圖片的兩種方式

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)圓形圖片的兩種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android截屏分享功能

    Android截屏分享功能

    最近項目經(jīng)理交給我一個任務(wù),要求實現(xiàn)android截屏功能,包括Android截屏獲取圖片、將圖片保存到本地、通知系統(tǒng)相冊更新、通過微信、QQ、微博分享截屏圖片。小編把實現(xiàn)思路分享到腳本之家平臺,需要的朋友參考下
    2017-12-12
  • 快速解決Android7.0下沉浸式狀態(tài)欄變灰的問題

    快速解決Android7.0下沉浸式狀態(tài)欄變灰的問題

    下面小編就為大家分享一篇快速解決Android7.0下沉浸式狀態(tài)欄變灰的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • Android 6.0以上權(quán)限拒絕打開權(quán)限設(shè)置界面的解決方法

    Android 6.0以上權(quán)限拒絕打開權(quán)限設(shè)置界面的解決方法

    今天小編就為大家分享一篇Android 6.0以上權(quán)限拒絕打開權(quán)限設(shè)置界面的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Android Webview上的ssl warning的處理方式詳解及實例

    Android Webview上的ssl warning的處理方式詳解及實例

    這篇文章主要介紹了Android Webview上的ssl warning的處理方式詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2017-02-02

最新評論

南郑县| 镇安县| 漳平市| 巢湖市| 施秉县| 通渭县| 达拉特旗| 邢台县| 黔东| 清镇市| 措勤县| 台前县| 台中市| 都兰县| 双柏县| 大英县| 垦利县| 湟源县| 兴宁市| 神池县| 青神县| 淅川县| 定结县| 兴仁县| 龙陵县| 垦利县| 广南县| 辰溪县| 吉安县| 灵璧县| 南京市| 蒙城县| 六枝特区| 靖远县| 宁海县| 和林格尔县| 南川市| 思茅市| 阿鲁科尔沁旗| 宁海县| 洛阳市|