AndroidEditText校驗 只輸入數字或特定字元
EditText的layout設定大家都知道就不累贅了,這裡主要說怎麼設定輸入限制。
EditText的屬性裡面已經封裝好了相關的設定,上一篇文章裡面也提到了,不熟悉的可以去檢視上一篇EditText屬性大全,這裡著重講輸入限制的屬性:
android:digits="1234567890.+-*/%\n()"
限制輸入框中只能輸入自己定義的這些字串 如果輸入其它將不予以顯示
android:phoneNumber="true"
限制輸入框中只能輸入手機號碼
android:password="true"
限制輸入框中輸入的任何內容將以"*"符號來顯示
android:hint="預設文字"
輸入內容前預設顯示在輸入框中的文字
android:textColorHint="#FF0000"
設定文字內容顏色
android:enabled="false"
設定輸入框不能被編輯
如果還有一些特殊的限制,比如我做一個專案只能輸入數字,且輸入0之後再輸入1,則只顯示1,這就需要單獨去進行設定了,也非常的簡單。
給EditText新增一個監聽事件,當檢測到裡面的內容變化以後,根據需求,修改相關的內容就可以了。
使用EditText的addTextChangedListener(TextWatcher watcher)方法對EditText實現監聽,TextWatcher是一個介面類,所以必須實現TextWatcher裡的抽象方法:
當EditText裡面的內容有變化的時候,觸發TextChangedListener事件,就會呼叫TextWatcher裡面的抽象方法。
- public class MainActivity extends Activity {
- private EditText text;
- String str;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- text = (EditText)findViewById(R.id.text);
-
text.addTextChangedListener(textWatcher);
- }
- private TextWatcher textWatcher = new TextWatcher() {
- @Override
- public void afterTextChanged(Editable s) {
- // TODO Auto-generated method stub
- Log.d("TAG","afterTextChanged--------------->");
- }
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
- // TODO Auto-generated method stub
- Log.d("TAG","beforeTextChanged--------------->");
- }
- @Override
- public void onTextChanged(CharSequence s, int start, int before,
- int count) {
- Log.d("TAG","onTextChanged--------------->");
- str = text.getText().toString();
- try {
- //if ((heighText.getText().toString())!=null)
- Integer.parseInt(str);
- } catch (Exception e) {
- // TODO: handle exception
- }
- }
- };
- }
該方法可以監聽到Edittext的變化,我在onTextChanged裡面監聽s值得變化,然後做修改以後再setText到EditText裡面,不過這時候經常會遇見游標跑到最前面的情況,很噁心,隨意每次setText的時候都需要用ev.setSelection(str.length())去重新設定游標位置為str字串的最後。