欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 優(yōu)雅的實現(xiàn)通用格式化編輯

 更新時間:2021年03月22日 09:47:17   作者:張坤的筆記  
這篇文章主要介紹了Android 優(yōu)雅的實現(xiàn)通用格式化編輯,幫助大家更好的理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下

格式化編輯的需求一般是從編輯手機號開始的,UI 給出的效果不是11個連續(xù)的數(shù)字,而是采用3、4、4的形式,每段中間會空一個字符。在技術(shù)實現(xiàn)的時候,一般會自定義一個控件 TelEditText 實現(xiàn)功能,隨著項目迭代,格式化編輯的需求可能會增加,比如說身份證號、自定義的優(yōu)惠券碼等,這個時候再給每種情況自定義一個控件就沒必要了,通過一個控件實現(xiàn)多種格式化編輯需求是更好的方案。

其實還可以更進一步,格式化編輯的核心邏輯就是給 EditText 添加一個 TextWatcher,通過 TextWatcher 中的文本變化回調(diào)來調(diào)整 EditText 中的文本,所以自定義 EditText 并不是必須的,對于開發(fā)者需要調(diào)用的字段和方法,可以通過擴展函數(shù)的方式提供。

使用

格式化編輯手機號

布局:

<androidx.appcompat.widget.AppCompatEditText
 android:id="@+id/etPhone"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:inputType="number" />

代碼:

// format is ' '
etPhone.setFormatRules(3, 4, 4)

// format is '-'
etPhone.setFormatRules(3, 4, 4, formatChar = '-')

格式化編輯身份證號

布局:

<androidx.appcompat.widget.AppCompatEditText
 android:id="@+id/etIDNumber"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:digits="@string/digits_id_number"/>

資源:

<string name="digits_id_number">0123456789xX</string>

代碼:

etIDNumber.setFormatRules(6, 4, 4, 4)

設(shè)置監(jiān)聽

etPhone.setOnFormatEditListener { isComplete, text ->
 if (isComplete) { // 編輯完成
  // 使用 toast 顯示移除格式化的文本
  Toast.makeText(this, text, Toast.LENGTH_SHORT).show()
 }
}

移除格式化的文本

etPhone.textWithFormatRemoved

實現(xiàn)原理

自定義一個 TextWatcher,定義一個字段 formatChar,值為格式化字符,默認(rèn)是空格。定義一個字段 formatCharIndexList,值為 EditText 文本中格式化字符所在位置的列表,比如對于格式化編輯手機號, formatCharIndexList 中的值為 [3, 8],既在 EditText 文本中格式化字符的位置應(yīng)該是3和8。

var formatChar: Char = ' '

val formatCharIndexList = ArrayList<Int>()

EditText 文本發(fā)生變化后,如果 EditText 文本的最后一個字符為格式化字符,則刪除最后一個字符;然后遍歷 EditText 文本中的每一個字符,如果該字符的位置等于格式化字符位置但不是格式化字符,則在該位置插入一個格式化字符,如果該字符的位置不等于格式化字符的位置但又是格式化字符,則刪除該格式化字符。

調(diào)用 insertFormatChar 或者 deleteChar 后,afterTextChanged 又會立即回調(diào)一次,可能會引起多次添加或刪除,導(dǎo)致格式化錯誤。所以每次 afterTextChanged 回調(diào)最多進行一次操作,如果后續(xù)還需要操作,放在下一次 afterTextChanged 回調(diào)中進行。

override fun afterTextChanged(s: Editable?) {
 val value = s?.toString() ?: return
 if (value.isEmpty()) return
 
 if (value.last() == formatChar) {
  deleteChar(s, value.lastIndex)
  return
 }
 
 value.forEachIndexed { index, c ->
  if (formatCharIndexList.contains(index)) {
   if (c != formatChar) {
    insertFormatChar(s, index)
    return
   }
  } else {
   if (c == formatChar) {
    deleteChar(s, index)
    return
   }
  }
 }
 ...
}

項目地址

format-edit,覺得用起來很爽的,請不要吝嗇你的 Star !

以上就是Android 優(yōu)雅的實現(xiàn)通用格式化編輯的詳細(xì)內(nèi)容,更多關(guān)于Android 通用格式化編輯的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android設(shè)置Padding和Margin(動態(tài)/靜態(tài))的方法實例

    Android設(shè)置Padding和Margin(動態(tài)/靜態(tài))的方法實例

    如何在java代碼中設(shè)置margin,也就是組件與組件之間的間距,下面這篇文章主要給大家介紹了關(guān)于Android設(shè)置Padding和Margin(動態(tài)/靜態(tài))的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • flutter底部彈出BottomSheet詳解

    flutter底部彈出BottomSheet詳解

    這篇文章主要為大家詳細(xì)介紹了flutter底部彈出BottomSheet,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Android編程中Tween動畫和Frame動畫實例分析

    Android編程中Tween動畫和Frame動畫實例分析

    這篇文章主要介紹了Android編程中Tween動畫和Frame動畫,結(jié)合實例形式較為詳細(xì)的分析了Android中Tween動畫和Frame動畫的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2015-12-12
  • Flutter 利用CustomScrollView實現(xiàn)滑動效果

    Flutter 利用CustomScrollView實現(xiàn)滑動效果

    我們可以使用ListView將幾個GridView組合在一起實現(xiàn)了不同可滑動組件的粘合,但是這里必須要設(shè)置禁止 GridView 的滑動,防止多個滑動組件的沖突。這種方式寫起來不太方便,事實上 Flutter 提供了 CustomScrollView 來粘合多個滑動組件,并且可以實現(xiàn)更有趣的滑動效果。
    2021-06-06
  • Android 錄制音視頻的完整代碼

    Android 錄制音視頻的完整代碼

    Android中,如果要錄制音頻的話有兩個選擇,一個是MediaRecorder,另一個就是AudioRecord,前者使用簡單,后者就相對復(fù)雜點,本文通過代碼給大家介紹Android 錄制音視頻的相關(guān)知識,一起看看吧
    2021-06-06
  • Android利用碎片fragment實現(xiàn)底部標(biāo)題欄(Github模板開源)

    Android利用碎片fragment實現(xiàn)底部標(biāo)題欄(Github模板開源)

    Fragment可以作為Activity的組成部分,一個Activity可以有多個Fragment,這篇文章主要介紹了Android利用碎片fragment實現(xiàn)底部標(biāo)題欄(Github模板開源),需要的朋友可以參考下
    2019-12-12
  • Android封裝Banner控件方法介紹

    Android封裝Banner控件方法介紹

    android-banner實現(xiàn)了一般banner循環(huán)輪播的效果,一頁只顯示一張圖片,也可以一頁顯示一張圖和相鄰兩個圖片的一部分,此項目僅僅是banner展示圖片,沒有多余的諸如指示器、頁面切換動畫等效果代碼,詳見效果圖和案例代碼
    2023-03-03
  • Android OnCreate()中獲取控件高度與寬度兩種方法詳解

    Android OnCreate()中獲取控件高度與寬度兩種方法詳解

    這篇文章主要介紹了Android OnCreate()中獲取控件高度與寬度兩種方法詳解的相關(guān)資料,這里提供了兩種方法,大家可以都看下,需要的朋友可以參考下
    2016-12-12
  • Android view更改背景資源與padding消失的問題解決辦法

    Android view更改背景資源與padding消失的問題解決辦法

    這篇文章主要介紹了Android view更改背景資源與padding消失的問題解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Android實現(xiàn)九宮格圖案解鎖

    Android實現(xiàn)九宮格圖案解鎖

    這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)九宮格圖案解鎖,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06

最新評論