我想篩選EditText的輸入字符只允許有效的浮點值。 (例如:「12,45」,只有一個逗號,...)。安卓:EditText KeyListener不工作
對於這一點,我用的是KeyListener(與onKeyListener或textChangeListener不混淆,我想防止進入無效數據的用戶)。
在Android 2.3.6和3.2 keyListener.filter()和keyListener.getAcceptedChars()不叫,我可以介紹任何字符(不限於.getAcceptedChars())
我發現很少有關單證KeyListener的。如果你有一個很好的例子或文檔,我很感興趣。
任何線索爲什麼這不起作用?
我做錯了什麼?
活動代碼示例:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(...);
setContentView(R.layout.editTextTest_lyt);
...
mEditTextTest = (EditText) findViewById(R.id.editTextTest);
mEditTextTest.setKeyListener(new NumberCommaDecimalKeyListenerTest());
...}
佈局代碼示例:
editTextTest_lyt.xml:
<EditText
android:id="@+id/editTextTest"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_weight="1"
android:inputType="numberSigned|numberDecimal"
android:ems="5"
android:maxLength="9"
android:maxLines="1"
android:gravity="right|center_vertical"
android:imeOptions="actionNext"/>
KeyListener的代碼示例:
public class NumberCommaDecimalKeyListenerTest extends NumberKeyListener {
private static final char[] mAccepted = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', ',' };
private static final boolean mSign = true;
private static final boolean mDecimal = true;
@Override
protected char[] getAcceptedChars()
{
Log.e("LODA", "KeylistenerTest.getAcceptedChars()"); // DONT show up in logs
return mAccepted;
}
public NumberCommaDecimalKeyListenerTest()
{ super();
Log.e("LODA", "CREATE KeylistenerTest"); // show up in logs
}
@Override
public int getInputType()
{
Log.e("LODA", "KeylistenerTest.getInputType()"); // show up in logs
int contentType = InputType.TYPE_CLASS_NUMBER;
if (mSign)
{
contentType |= InputType.TYPE_NUMBER_FLAG_SIGNED;
}
if (mDecimal)
{
contentType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
}
return contentType;
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
{
Log.e("LODA", "enter KeylistenerTest.filter"); // DONT show up in logs
// My logic will go here...
// if user pressed '.', is changed for ','
source = source.toString().replace(".", ",");
source = source.toString().replace("6", "9");
CharSequence out = super.filter(source, start, end, dest, dstart, dend);
return out;
}
}
看起來像我想念瞭解keyListener類。 (順便說一句,什麼意思是「一般不使用」?!?)。感謝這個見解。 – Loda 2012-02-01 10:34:50
我認爲這意味着在大多數情況下它不會被使用,除了當getInputType()的返回類型是TYPE_NULL時。 – user1173706 2012-02-01 12:29:35
可能。無論如何,這個類的文檔不是很清楚/完整。我會盡快做一些測試。 – Loda 2012-02-01 14:05:59