android edittext InputFilter 輸入控制

心鑫發表於2013-08-20

InputFilter 可能需要對使用者的輸入進行一些限制,可以為EditText Widget設定一個InputFilter以實現這一功能

如:

/*
         * 使用輸入過濾器約束使用者輸入
         * (只能輸入兩個大寫字母)
         * setFilters方法需要呼叫一個InputFilter物件陣列。
         * 本例中將所有輸入的小寫字母自動轉換為大寫字母,而且被限定在
         * 兩個字元
         */
        final EditText text_f = (EditText)findViewById(R.id.editText01);
        text_f.setFilters(new InputFilter[]{
                        new InputFilter.AllCaps(),
                        new InputFilter.LengthFilter(2)
        });

下例 小數點後兩位
private void initEt() {
		tv1=(EditText) findViewById(R.id.et1);
		tv2=(EditText) findViewById(R.id.et2);
		tv1.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
		tv2.setTransformationMethod(PasswordTransformationMethod.getInstance());
		String s="adb";
		tv1.setTextKeepState(s);
		tv2.setText(s);
		tv1.setFilters(new InputFilter[] { lengthfilter });

	}
	// 設定小數位數控制
			InputFilter lengthfilter = new InputFilter() {
				public CharSequence filter(CharSequence source, int start, int end,
						Spanned dest, int dstart, int dend) {
					System.out.println(source.toString()+"-->"+start+"-->"+end);
					System.out.println(dest.toString()+"-->"+dstart+"-->"+dend);
					// 刪除等特殊字元,直接返回
					if ("".equals(source.toString())) {
						return null;
					}
					String dValue = dest.toString();
					String[] splitArray = dValue.split("\\.");
					if (splitArray.length > 1) {
						String dotValue = splitArray[1];
						int diff = dotValue.length() + 1 - 2;
						if (diff > 0) {
							CharSequence c=source.subSequence(start, end - diff);
							System.out.println(c.toString());
							return c;
						}
					}
					return null;
				}
			};
			

相關文章