1. 程式人生 > >android 中EditView輸入電話號碼(3+4+4格式)

android 中EditView輸入電話號碼(3+4+4格式)

在android中需要在EditView中輸入電話號碼3 + 4 + 4格式時,以下兩種方式都可以實現,但是個人覺得第一種方式,即獲取EditView文字內容變化是最好的方式。所謂3+4+4的電話號碼格式,如:135 4567 8900

第一種:捕捉EditView的內容改變

et_PhoneNum.addTextChangedListener(new TextWatcher() {
			@Override
			public void onTextChanged(CharSequence str, int arg1, int arg2, int arg3) { // 已經改變了的。
				String contents = str.toString();
				int length = contents.length();
				if(length == 4){
					if(contents.substring(3).equals(new String(" "))){ // -
						contents = contents.substring(0, 3);
						et_PhoneNum.setText(contents);
						et_PhoneNum.setSelection(contents.length());
					}else{ // +
						contents = contents.substring(0, 3) + " " + contents.substring(3);
						et_PhoneNum.setText(contents);
						et_PhoneNum.setSelection(contents.length());
					}
				}
				else if(length == 9){
					if(contents.substring(8).equals(new String(" "))){ // -
						contents = contents.substring(0, 8);
						et_PhoneNum.setText(contents);
						et_PhoneNum.setSelection(contents.length());
					}else{// +
						contents = contents.substring(0, 8) + " " + contents.substring(8);
						et_PhoneNum.setText(contents);
						et_PhoneNum.setSelection(contents.length());
					}
				}
			}
			@Override
			public void beforeTextChanged(CharSequence str, int arg1, int arg2,int arg3) {
			}
			
			@Override
			public void afterTextChanged(Editable arg0) {// TODO Auto-generated method stub
			}
		});
這裡只羅列了主要的邏輯程式碼,這個EditView的inputType是phone。其它的就不用多說了,佈局上的事情。

第二種:捕獲EditText的onKeyDown和onKeyUp事件,分別進行處理,但是在搜狗軟鍵盤上,按數字的時候不能響應onKeyUp。有點bug,相比之下,還是第一種方式最好。

et_PhoneNum.setOnKeyListener(new MyEditTextOnKeyListener());
class MyEditTextOnKeyListener implements OnKeyListener{
		@Override
		public boolean onKey(View arg0, int code, KeyEvent event) {
			
			if(event.getAction() == KeyEvent.ACTION_DOWN){ 
				if(code == KeyEvent.KEYCODE_DEL){
					String phoneNum2 = et_PhoneNum.getText().toString() ;
					int length2 = phoneNum2.length() ;
					if(length2 == 5){
						phoneNum2 = phoneNum2.substring(0, 3);
						et_PhoneNum.setText(phoneNum2);
						et_PhoneNum.setSelection(phoneNum2.length());
						return true;
					}else if(length2 == 10){
						phoneNum2 = phoneNum2.substring(0, 8);
						et_PhoneNum.setText(phoneNum2);
						et_PhoneNum.setSelection(phoneNum2.length());
						return true;
					}
					return false;
				}
			}
			
			if(event.getAction() == KeyEvent.ACTION_UP){ // must caught key up
				
				String phoneNum = et_PhoneNum.getText().toString() ;
				Log.e("ACTION_UP"," code = " + code);
				Log.e("ACTION_UP"," phoneNum = " + phoneNum);
				if(phoneNum.equals("")){
					return false ;
				}
				int length = phoneNum.length() ;
				if(length == 4){
					phoneNum = phoneNum.substring(0, 3) + " " + phoneNum.substring(3, 4);
					et_PhoneNum.setText(phoneNum);
					et_PhoneNum.setSelection(phoneNum.length());
				}
				if(length == 9){
					phoneNum = phoneNum.substring(0, 8) + " " + phoneNum.substring(8, 9);
					et_PhoneNum.setText(phoneNum);
					et_PhoneNum.setSelection(phoneNum.length());
				}
			}
			return false;
		}
	}




相關推薦

android EditView輸入電話號碼3+4+4格式

在android中需要在EditView中輸入電話號碼3 + 4 + 4格式時,以下兩種方式都可以實現,但是個人覺得第一種方式,即獲取EditView文字內容變化是最好的方式。所謂3+4+4的電話號碼格式,如:135 4567 8900 第一種:捕捉EditView的內容改

android輸入手機號碼有效性驗證是否為正確的手機號碼

 在Utils包名下面建立電話號碼匹配工具類 public class TelNumMatch { /* * 10. * 移動: 2G號段(GSM網路)有139,138,137,136,135,134,159,158,152,151,150,

Android字型設定和calligraphy高效載入字型包用法

Android預設字型 TextView 的 typeface 屬性支援 “Sans”,”serif”,”monospace” 這三種字型,如果在沒有指定字型的情況下,系統預設會使用 “Sans” 作為文字顯示的字型。但這三種字型只支援英文,也就是說只要你顯

Android驗證輸入是否為漢字及手機號,郵箱驗證,IP地址可用port號驗證

bili repl ips gettext content 驗證 arr mat 數據 1,驗證是否為漢字 // 驗證昵稱 private boolean verifyNickname() { String nickname = edt_use

Android關於JNI 的學習對於JNIEnv的一些認識

else size 初步 jint 使用 包括 pri jnienv 就會 一個簡單的樣例讓我們初步地了解JNI的作用,可是關於JNI中的一些概念還是須要了解清楚,才可以更好的去利用它來實現我們想要做的事情。 那麽C++和Java之間的是怎樣通過JNI來進行互相調用的呢

Servlet和Android網絡交互基礎3

framework 方法 con 不一致 war 新建 name屬性 conf junit 在上一章中採用了最簡單的創建service端代碼方式,但在實際開發中一般都會採用比較成熟的框架。以下是完整的maven+spring mvc 創建service的

android一些特殊字符如:←↑→↓等箭頭符號的Unicode碼值

lin gb2312 ring clu itl app lan orien lam 在項目中,有時候在一些控件(如Button、TextView)中要添加一些符號,如下圖所示: 這個時候可以使用圖片的方式來顯示,不過這

java 驗證手機號碼電話號碼包括最新的電信、聯通和移動號碼

-s 轉義 電信號 auth input sim pem csharp class 一、目前的號碼段(2017-06-01更新) 二、代碼 package com.linbilin.test; import java.util.regex.Pattern;

android開發學習 ------- 【轉】 android的單例模式 詳解

lan post tail -- and 使用 href details android開發 https://blog.csdn.net/u011418943/article/details/60139644 這篇文章 前因後果 都說出來了 ,值得學習。 htt

AndroidMQTT的簡單實現只是連線到伺服器,未實現傳送、接受資訊

1.新增mqtt包到gradle.build a.在project的gradle.build中新增地址(P:我下載的參考例子是不用新增的,但是我自己寫的時候不新增就編譯不過去) allprojects { repositories { google()

Android的程序保活不死程序

Android中的程序保活方式主要分為以下三種: 黑色保活:不同的app程序,用廣播相互喚醒(包括利用系統提供的廣播進行喚醒) 白色保活:啟動前臺Service 灰色保活:利用系統的漏洞啟動前臺Service 黑色保活 利用不同的app程序使用廣播來進

26.如何在實際專案應用ROS導航相關3- 多點導航/巡航

前文 18.如何在實際專案中應用ROS導航相關(1)定點導航使用程式啟動一個pibot_simulator,並且完成一個定點導航,本文對其修改完成一個多點導航航的例子 直接貼出程式碼 navigation_multi_demo.launch <launch

Android鎖屏勒索病毒分析3刷贊

1.樣本概況 1.1 基本資訊 樣本名稱: 刷贊. 所屬家族: 鎖屏勒索病毒(a.rogue.SimpleLocker.a) MD5值: 7626090b69cd1e2e5671a022712808eb 包名: com.binge.mohe 入口: Mai

讀書筆記:Android的程序間通訊

閱讀的書籍:《Android開發藝術探索》 關鍵詞:Serializable,Parcelable,Serializable和Parcelable的區別,Binder Serializable介面:java提供的一個序列化介面,為物件提供標準的序列化和反序列化操作

C語言輸入輸出函式學習筆記

文章目錄 c語言中的基本輸入與輸出函式 1.格式化輸入輸出函式 1.1printf()函式 1.2scanf()函式 2.非格式化的輸入輸出函式 2.1puts()和gets()函式

numpy一些常用函式記錄3

1. np.prod()    : prod函式用於求陣列元素的乘積。 Note: 陣列沒有元素,即為空時,得到的值為 1.0 In [2]: np.prod([]) Out[2]: 1.0 In [4]: np.prod([[],[]]) Out[4]: 1.0

Android捕獲回退鍵back用於提示是否退出

1.過載Activity的OnkeyDown事件 2.在裡面判斷兩次back間隔的時間是否大於設定的時間間隔, 大於則提示,小於則直接退出。       public class MainActivity : Activity {

android開發如何獲取電話號碼的歸屬地資訊

由於本人在藍芽專案的開發中,需要在當撥打或接聽電話時彈出的通話介面中需要顯示其該號碼的歸屬地等資訊,所以今天決定將這個關於如何獲取手機號碼歸屬地的使用方法總結下來,以便將來所需,利人也利己。其實這個功能也是相當的常見,例如手機3G撥號時彈出的通話介面就有。 先

Android如何修改系統時間應用程式獲得系統許可權

在 Android 的API中有提供 SystemClock.setCurrentTimeMillis()函式來修改系統時間,可惜無論你怎麼呼叫這個函式都是沒用的,無論模擬器還是真機,在logcat中總會得到"Unable to open alarm driver: Permission denied "

轉載:Android如何修改系統時間應用程式獲得系統許可權

在 android 的API中有提供 SystemClock.setCurrentTimeMillis()函式來修改系統時間,可惜無論你怎麼呼叫這個函式都是沒用的,無論模擬器還是真機,在logcat中總會得到"Unable to open alarm driver: Permission denied "