1. 程式人生 > >Android學習之自定義TextWatcher來監聽文字最大輸入字數

Android學習之自定義TextWatcher來監聽文字最大輸入字數

開發中有種很可能會遇到的需求就是限制EditText的文字輸入字數,例如微博就限制140字,如果只是限制輸入的字數的話很簡單,EditText有個屬性叫android:maxLength,設定140就行了,但是當達到最大輸入字數時還要提示使用者達到了呢?這時候就需要自定義TextWatcher了,TextWatcher字如其意,就是文字觀察器,用來觀察文字的變化的,一般用在EditText中。好了,上程式碼:

佈局中畫個EditText就行了,先看自定義的TextWatcher,除了達到最大字數時會彈出Toast,同時也會將游標放置在文字最後:

/**
 * 最大輸入觀察器
 * 監聽輸入內容是否超出最大長度,並設定游標位置
* * @author yuzhentao */ public class MaxInputTextWatcher implements TextWatcher { private Context context; private EditText editText = null; private int maxLength = 0; public MaxInputTextWatcher(Context context, EditText editText, int maxLength) { this.context = context; this
.editText = editText; this.maxLength = maxLength; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { Editable editable = editText.getText();
int length = editable.length();//原字串長度 if (length > maxLength) {//如果原字串長度大於最大長度 int selectEndIndex = Selection.getSelectionEnd(editable);//getSelectionEnd:獲取游標結束的索引值 String str = editable.toString();//舊字串 String newStr = str.substring(0, maxLength);//擷取新字串 editText.setText(newStr); editable = editText.getText(); int newLength = editable.length();//新字串長度 if (selectEndIndex > newLength) {//如果游標結束的索引值超過新字串長度 selectEndIndex = editable.length(); Toast.makeText(context, "最多隻能輸入" + selectEndIndex + "個字哦", Toast.LENGTH_SHORT).show(); } Selection.setSelection(editable, selectEndIndex);//設定新游標所在的位置 } } @Override public void afterTextChanged(Editable s) { } }
首先當然是實現TextWatcher了,會實現3個方法,一般我們都在onTextChanged()中操作,細節大家看程式碼就行。

然後就是主介面中去使用這個自定義的TextWatcher了:

/**
 * 主介面
 *
 * @author yuzhentao
 */
public class MainActivity extends Activity {

    private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}

    private void initView() {
        context = this;
EditText et = (EditText) findViewById(R.id.edittext_activity_main);
et.addTextChangedListener(new MaxInputTextWatcher(context, et, 140));
}

}
通過addTextChangedListener()來使用這個自定義的TextWatcher,輸入自己想要的最大輸入字數即可。

一個很簡單的功能,希望對大家有所幫助。

效果圖:


相關推薦

Android學習定義TextWatcher文字輸入字數

開發中有種很可能會遇到的需求就是限制EditText的文字輸入字數,例如微博就限制140字,如果只是限制輸入的字數的話很簡單,EditText有個屬性叫android:maxLength,設定140就

Android學習 定義屬性及TypedArray的用法

  一、 背景說明:           在xml檔案裡定義控制元件的屬性,我們用的最多的是 Android系統自帶的屬性如: <ImageView android:id="@+id/iv_icon" android

JS學習筆記 - 定義右鍵選單、文字框只能輸入數字

  <script> // 事件總共有2個部分, //1.點選滑鼠右鍵的表現 oncontextmenu 2.點選滑鼠左鍵的表現(即普通點選onclick) // 點選右鍵,div位置定位到滑鼠所在位置, 且阻止滑鼠右鍵的預設選單 // 點選左

我的Android進階旅------>Android如何通過定義SeekBar實現視訊播放進度條

首先來看一下效果圖,如下所示:其中進度條如下:接下來說一說我的思路,上面的進度拖動條有自定義的Thumb,在Thumb正上方有一個PopupWindow視窗,窗口裡面顯示當前的播放時間。在SeekBar右邊有一個文字框顯示當前播放時間/總時間。step1、先來看一看Popup

android學習5#--定義View座標系統

近期在學習android過程中,看到有人在伯樂在線上分享如何開發自定義View的一系列文章。我覺得對於初學者,很有必要掌握它,因為今後很多時候系統自帶的元件不足以滿足我們的功能需求,那麼我們就要根據需求來定義一個能滿足我們需求的View元件。 但是我並不會按照

Android基礎定義Application

ase man googl extends == attach 做到 不知道 ces Application Android提供了一個Application類,每當應用程序啟動時,系統會自動將這個類進行初始化。在項目中,我們在一些工具類采用了單例模式,其生命周期和整個應用程

Android 開發定義控制元件開發-01

最近一直在忙於公司的專案,因為要去現場測試正式使用,專案不大但是經手了三個人,到我這裡只能去填坑了,不說這個了,說一下今天得主題,自定義控制元件之基本圖形繪製。 我們平時畫圖需要兩種工具:紙和筆。在Android中 Paint 就是畫筆,而Canvas類就是紙,在這裡叫做畫布。 所以

C++學習定義型別

我們在C語言裡面學習了結構體,在C++中的結構體和C中的結構體不一樣。C++允許新增建構函式,成員方法,訪問許可權等等。在C++中還有一種型別叫做類,也可以有成員方法,訪問許可權和建構函式,成員變數等等。那麼這之間有什麼區別呢?其實沒有區別,唯一的區別就是在不宣告許可權的時候預設許可權問題。

Android 基礎定義View使用技巧難點總結

1、簡介 該文章記錄的是本人在日常自定義View的一些常見技巧與問題的解決方案。 2、具體案例 2.1 探究畫筆的具體位置 情況1: // 繪製一個 描邊為10f的的一個矩形 @Override protected void onDraw(Canva

Android學習—簡單定義View(一)

最近手上不忙所以回顧了一下自己今年來所接觸和學習的東西,突然覺得寫部落格真是一個很好的方式,希望自己 可以堅持下去。 自定義View的流程 建立自定義類繼承View,並重寫構造方法,構造方法總共有四種,我們暫時只需要繼承前兩種 public CircleVi

Android UI定義頭部指示器

1. 簡介  本文將記錄的是一些有效的自定義指示器demo,誠然Indicator的開源框架還是比較多的,我們在具體具體中可以衡量。一些簡單的自定義基礎還是有必要好好掌握的。 2. demo樣例 2.1 圖片背景選擇+ViewPager樣式 首先看下效果吧: 如下圖

安卓開發學習定義Toast的實現

背景 吐司提示很常見,但系統的吐司有一個缺點,就是顯示時長不能自定義,而自定義Toast可以實現這一點   實現步驟 整體思路是:活動視窗發出彈出吐司請求,然後中間層接收請求,發給排程層,排程層顯示吐司 這裡請求的傳遞就是方法的呼叫,顯示和消除吐司的關鍵是呼叫windo

Android 開發定義控制元件開發-02

1.畫筆的基本設定 : 1.setColor() 該函式的作用是設定畫筆顏色,完整的函式宣告如下: void setColor(int color) 我們知道,一種顏色是由紅、綠、藍三色合成出來的,所以引數 color 只能取8位的0xAARRGGBB樣式顏色值。 其中:

vivado學習定義IP和呼叫定義IP和的步驟

一、自定義IP核 1、開啟 VIVADO 軟體,新建一個工程。 2、Flow Navigater下,單擊 Add Source,選擇 Add or Creat design Sources,然後單擊 Next。 3、單擊 Create File,輸入檔名,單擊 OK。 4、

Mybatis學習定義typeHandler

自定義typeHandler背景比如儲存到資料庫時,有以下需求:1.有個列舉型別的值,想要儲存到資料庫為字串或整數2.Date型別存入資料庫為毫秒數3.物件中的集合(List)屬性儲存資料庫為{xxx,xxx,xxx}的格式,讀取出來自動轉車List傳統的讀取操作也能達到這個

Android開發定義可清空內容的EditText

在開發過程中不可避免的總會遇到比如登入註冊、使用者資訊修改等,這時候又是不可避免的會用到EditText控制元件。這個控制元件的使用頻率雖然幾乎類似我們吃飯用“筷子”的頻率,but能不能用出花樣

SpringBoot+Shiro學習定義攔截器管理線上使用者(踢出使用者)

應用場景 我們經常會有用到,當A 使用者在北京登入 ,然後A使用者在天津再登入 ,要踢出北京登入的狀態。如果使用者在北京重新登入,那麼又要踢出天津的使用者,這樣反覆。又或是需要限制同一使用者的同時線上數量,超出限制後,踢出最先登入的或是踢出最後登入的。 第一

【本人禿頂程式設計師】Nginx學習定義訪問日誌

←←←←←←←←←←←← 快,點關注! 寫在開始 日誌的重要性不言而喻,一般來說我們開發過程中會為每個專案定義自己的日誌格式以及儲存路徑。 就我們普通的JAVAWEB專案來說,重要的日誌一般輸出並存放在Tomcat的log目錄下,並區分日誌輸出級別。用於區分,查閱並統計相關日誌資

Android開發定義控制元件--ViewPager

package com.itheima18.viewpager; import java.util.ArrayList; import java.util.Timer; import java.util.concurrent.Executors; import java.util.concurrent.Sc

Android開發定義圓角矩形圖片ImageView

android中的ImageView只能顯示矩形的圖片,這樣一來不能滿足我們其他的需求,比如要顯示圓角矩形的圖片,這個時候,我們就需要自定義ImageView了,其原理就是首先獲取到圖片的Bitmap,然後進行裁剪對應的圓角矩形的bitmap,然後在onDraw()進行繪製