android設置輸入框輸入字符限制,Android EditText限制輸入字符的方法總結

Android EditText限制輸入字符的方法總結

最近項目要求限制密碼輸入的字符類型, 例如不能輸入中文。?? 現在總結一下EditText的各種實現方式,? 以比較各種方法的優劣。

第一種方式:? 設置EditText的inputType屬性,可以通過xml或者Java文件來設置。假如我要設置為顯示密碼的形式,可以像下面這樣設置:

在xml中,??Android:inputType="textPassword"

在java文件中,可以用 ev.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

inputType參數有phone、textPasswrod等等屬性, 有興趣的話可以測試一下。

15058979151.png?2017621142349

第二種: 設置EditText的android:digits 屬性, 這種方式可以指出要支持的字符。比如要限制只能輸入數字和字母,可以這樣:

android:digits="0123456789abcdefghijklmnopqrstuvwxyz"。

PS:吐槽一下,寫著好累,不支持區間操作符~或-

第三種: 使用TextWather監聽EditText的字符變化, 當內容改變時刪掉不想要的字符。說白了就是用戶可以隨便按鍵盤,在代碼里馬上刪掉非法字符。 PS: 常見的搜索功能輸入框就是用TextWatcher監測關鍵詞變化,然后查數據并顯示出來了。示例代碼:只能輸入字母或者數字, 如果要支持其它字符可以修改regEx正則表達式。

evPwd = (EditText) findViewById(R.id.ev_password);

evPwd.addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence charSequence,int i,int i1,int i2) {

}

@Override

public void onTextChanged(CharSequence charSequence,int i2) {

String editable = evPwd.getText().toString();

String regEx = "[^a-zA-Z0-9]"; //只能輸入字母或數字

Pattern p = Pattern.compile(regEx);

Matcher m = p.matcher(editable);

String str = m.replaceAll("").trim(); //刪掉不是字母或數字的字符

if(!editable.equals(str)){

evPwd.setText(str); //設置EditText的字符

evPwd.setSelection(str.length()); //因為刪除了字符,要重寫設置新的光標所在位置

}

}

第四種:通過InputFilter來實現。實現InputFilter過濾器, 需要覆蓋一個叫filter的方法。

public abstract CharSequence filter (

CharSequence source,//輸入的文字

int start,//開始位置

int end,//結束位置

Spanned dest,//當前顯示的內容

int dstart,//當前開始位置

int dend //當前結束位置

);

注意: IntentFilter是個數組, 也就是說可以寫多個過濾條件!

下面的實現使得EditText只接收字符(數字、字母),Character.isLetterOrDigit會把中文也當做Letter, 所以要在寫個正則判斷是否中文。

evPwd.setFilters(new InputFilter[]{

new InputFilter() {

@Override

public CharSequence filter(CharSequence charSequence,Spanned spanned,int i2,int i3) {

String regex = "^[\u4E00-\u9FA5]+$";

boolean isChinese = Pattern.matches(regex,charSequence.toString());

if (!Character.isLetterOrDigit(charSequence.charAt(i)) || isChinese) {

return "";

}

return null;

}

}

});

第五種:??? 使用EditText的InputConnection屬性限制輸入字符。 新建個類繼承于EditText并覆蓋onCreateInputConnection函數, 在xml里使用LimitText替換EditText。

public class LimitEditText extends EditText {

public LimitEditText(Context context) {

super(context);

}

public LimitEditText(Context context,AttributeSet attrs) {

super(context,attrs);

}

public LimitEditText(Context context,AttributeSet attrs,int defStyleAttr) {

super(context,attrs,defStyleAttr);

}

/**

* 輸入法

* @param outAttrs

* @return

*/

@Override

public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

return new InnerInputConnecttion(super.onCreateInputConnection(outAttrs),false);

}

class InnerInputConnecttion extends InputConnectionWrapper implements InputConnection {

public mInputConnecttion(InputConnection target,boolean mutable) {

super(target,mutable);

}

/**

* 對輸入的內容進行攔截

*

* @param text

* @param newCursorPosition

* @return

*/

@Override

public boolean commitText(CharSequence text,int newCursorPosition) {

// 只能輸入字母或者數字

if (!Character.isLetterOrDigit(charSequence.charAt(i)) || isChinese) {

return false;

}

return super.commitText(text,newCursorPosition);

}

@Override

public boolean sendKeyEvent(KeyEvent event) {

return super.sendKeyEvent(event);

}

@Override

public boolean setSelection(int start,int end) {

return super.setSelection(start,end);

}

}

}

以上是EditText輸入限制的所有方法, 大家如有疑問,請留言或到本站社區討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

總結

如果覺得編程之家網站內容還不錯,歡迎將編程之家網站推薦給程序員好友。

本圖文內容來源于網友網絡收集整理提供,作為學習參考使用,版權屬于原作者。

小編個人微信號 jb51ccc

喜歡與人分享編程技術與工作經驗,歡迎加入編程之家官方交流群!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530092.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530092.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530092.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

android動態改變菜單欄,Android動態設置主題(使用RxBus模式)

之前寫過一篇文章:RxBus的實現及簡單使用。今天我們嘗試使用RxBus動態切換主題。一、定義主題顏色color.xml#F44336#D32F2F#F44336#E91E63#C2185B#E91E63#795548#5D4037#795548#2196F3#1976D2#2196F3#607D8B#455A64#607D8B#FFEB3B#FBC02D#FFEB3B#673AB7#512DA8#673A…

android 圖片分析,Android圖片處理實例分析

本文實例講述了Android圖片處理的方法。分享給大家供大家參考,具體如下:package cn.szbw.util;import Android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.…

android開發按鈕顏色,Android編程實現簡單設置按鈕顏色的方法

本文實例講述了Android編程實現簡單設置按鈕顏色的方法。分享給大家供大家參考,具體如下:1.工程目錄a.在res目錄-新建drawble文件夾放入自定義圖片2.main.xmlandroid:orientation"vertical"android:layout_width"fill_parent"androi…

艾默生變頻器ev1000故障代碼_國產變頻器型號大全,梳理國產變頻的前世今生!...

在工控領域,變頻器已經廣為所知且應用范圍廣泛,各方對變頻器能給出形形色色的描述。維基百科給出的定義:“變頻器(variable frequency drive,常見縮寫VFD),也稱為變頻驅動器或驅動控制器。變頻器是可調速驅動系統的一種…

android音樂播放器案例,Android MediaPlayer實現音樂播放器實例代碼

Android MediaPlayer實現音樂播放器1、布局文件android:layout_width"fill_parent"android:layout_height"fill_parent"android:orientation"vertical" >android:id"id/hint"android:layout_width"wrap_content"android:…

單邊指數信號的特點_今日股市分析:上證指數若能守住3400,蓄力反彈就有戲...

昨日整體概況上漲:848只 下跌:3009只漲停:69只 跌停:12只昨天的上證指數低開低走,午后沖紅又回落,另一邊的創業板卻是單邊下行跌超3%,板塊方向農業、洪水概念股、還有電力板塊較強。按照昨日置頂…

萬豐科技機器人排名_機器人系統集成“7宗最”

摘要:對于眾多集成商而言,作為典型的“夾心餅奧利奧”,面對客戶的各種要求,“不敢勉強你,只好為難自己”系真實寫照。1、企業數量最多GGII統計數據顯示,截至2019年年底,中國工業機器人產業企業數…

android 電池高溫關機,Android 關機問題分析指南

本篇文章主要介紹 Android 開發中的 關機 部分知識點,通過閱讀本篇文章,您將收獲以下內容:1 . 確認是亮屏關機還是滅屏關機?關機時是否有播放關機動畫?2 . 是直接關機還是關機后會自動重啟?3.異常關機時,連…

android switch 未定義,在switch語句中初始化時未定義的變量?

問題本身就是一個明顯的答案.無論如何,這是我的代碼片段......switch(cSet)...case 8:{ //Special CharactersfinalSet special;char* charSet new char[special.size() 1];charSet[special.size()] 0; //Append null terminatormemcpy(charSet, special.c_str(), special.…

android 克隆對象,克隆會破壞單例對象嗎?

假設有這樣一個場景,如果復制的目標對象恰好是單例對象,那會不會破壞單例對象呢?當然,我們在已知的情況下肯定不會這么干,但如果發生了意外怎么辦?不防來修改一下代碼。public class ConcretePrototype imp…

轉網口顯示未識別的網絡_已有1700萬用戶攜號轉網 超99%用戶1小時內辦結

攜號轉網是利國利民的大舉措,受到了很多電信用戶的擁護和支持。12月15日,工信部副部長劉烈宏在某會議上進行報告指出,目前我國 “攜號轉網”服務已經累計有 1700 萬用戶完成攜轉,一小時攜轉成功辦結率超過 99%。已有1700萬用戶攜號…

adb 更新 android sdk,[轉載]安裝Android時SDK?AVD?MANAGER時更新報錯的解決辦法

最近安裝Android SDK時,發現更新時出現“A folder failed to be renamed ormoved.”等類似錯誤。經過測試和G后發現解決辦法目前有兩種情況:1、確實是因為打開了相關目錄或者其他程序占用率文件夾句柄。關閉相關資源管理器或者關閉相關程序即可&#xff…

2020.2idea怎么創建html項目_陳肆橫項目日記:百度百科怎么創建自己的名字

百度百科是一個介紹人物很好的平臺,很多的都想創造屬于自己的百度百科。而人物百科詞條,是百度百科專門為知名人物提供個人信息展示的平臺。創建一個屬于自己的百度百科詞條,就相當于擁有了一張名片,不僅有著影響力與知名度的傳播…

android c++ gizp 調用 so,使用ndk-build編譯 android調用的so庫

前沿編譯so的方法有兩種方法第一種就是編寫原生的makefile文件利用gcc進行編譯,這里我講解的是另外一種。采用NDK提供的ndk-build編譯。簡介使用ndk編譯的時候需要介紹它的腳本文件,Android.mk和Application.mk,但是Application.mk是可選的,用…

elctron項目_electron項目結構介紹

#項目結構my-project├─ .electron-vue(webpack配置文件)│ └─ build.js(生產環境構建代碼)│ └─ dev-client.js(熱加載相關)│ └─ dev-runner.js(開發環境啟動入口)│ └─ webpack.main.config.js(主進程配置文件)│ └─ webpack.renderer.config.js(渲染進程配…

無法啟動mysqll1006_CentOS7下MySQL服務啟動失敗原因及解決方法

在重啟阿里的CentOS7服務器后,重啟MySQL 出現錯誤Starting mysqld (via systemctl):Job for mysqld.service failed because the control process exited with error code.See "systemctl status mysqld.service" and "journalctl -xe" fordetails.[FAILED…

html5判斷多選框是否選擇的函數,復選框(checkbox)、多選框

1、需求分析可同時選中多個選項,實現全選、全不選、反選等功能。2、技術分析基礎的HTML、CSS、JavaScript。3、詳細分析3.1 HTML部分圖示是一個列表加底部一段文字說明,列表包含三個部分,整體是一個多選列表,上部是總的選項&#…

layer調用父頁面方法_Ruby for SketchUp之圖層【Layer】

我們學習了群組、組件及組件定義,今天來看看圖層【Layer】,在Sketchup2020版本中已經更名為“標記”,如圖那么圖層在我們建模過程中能帶來哪些便利呢?可以快速的隱藏同一圖層內所有東西,而不需要逐一選擇并右鍵點擊隱藏…

html盒子有哪些屬性,盒子模型有哪些屬性 在html5中哪些元素具有盒子模型

HTML盒模型基本屬性有哪些CSS盒子模型就是在CSS技術所使用的一種思維模型。CSS假定所有的HTML文檔元素都生成一個描述該元素在HTML文檔布局中所占空間的矩形元素框,可以形象地將其看作是一個盒子。通過定義一系列與盒子相關的屬性,可極大地豐富和促進各個…

huffman編碼的程序流程圖_F28379D之CLB解碼多摩川編碼器2——LIB版例程講解(原創)...

我在第一篇文章中已經跟大家介紹過379解碼多摩川編碼器的一些入手小知識,鏈接如下TMS320F28379D之CLB解碼多摩川編碼器1——入手小知識(原創)請大家一定要看入手小知識,再來看例程分析。今天跟大家分析一下TI的官方例程。首先&…