也許這已經回答了,但是我在SO上找不到它。EditText中的maxLength屬性不能像預期的那樣通過xml和java工作
我有一個非常簡單的要求:限制EditText中字符的長度。
我在這裏使用了xml中的maxLength
標籤。 奇怪的是,如果輸入文本的長度超過了指定的限制,則通過軟鍵盤按退格鍵不能刪除文本。輸入的文本保留在EditText字段中。關閉並重新打開軟keayboard後,文本變爲「可刪除」。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:id="@+id/edit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLength="5"
android:hint="text"/>
</RelativeLayout>
添加此佈局足以獲得所描述的行爲。
我加了一個InputFilter來看看這裏發生了什麼。沒有InputFilter,所描述的結果將是相同的!
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText et = (EditText) findViewById(R.id.edit);
InputFilter filter = new InputFilter() {
@Override
public CharSequence filter(CharSequence source,
int start,
int end,
Spanned dest,
int dstart,
int dend) {
if (source != null) {
Log.v("edit","source = " + source.toString());
Log.v("edit","start = " + start);
Log.v("edit","end = " + end);
}
if (dest != null) {
Log.v("edit","dest= " + dest.toString());
Log.v("edit","dstart = " + dstart);
Log.v("edit","dend = " + dend);
}
return null;
}
};
InputFilter[] oldFilters = et.getFilters();
InputFilter[] newFilters = new InputFilter[oldFilters.length + 1];
System.arraycopy(oldFilters, 0, newFilters, 0, oldFilters.length);
newFilters[oldFilters.length] = filter;
et.setFilters(newFilters);
}
雖然記錄我可以看到source
將保持不變,如果超過maxLength
,但跨區dest
改變應該的方式,按退格鍵刪除文本字符。
現在這裏發生了什麼?這是一個錯誤還是真正的默認行爲。因爲如果用戶鍵入他的文本並超過了限制,他沒有機會糾正。
編輯:
通過桑迪普·庫馬爾使用Java代碼來設置最大長度會導致同樣的結果建議的方式。
et.setFilters(new InputFilter[]{new InputFilter.LengthFilter(5)});
順便說一句,我正在使用Android API 4.4.2和SDK 23.0.2。
你有沒有解決這個?我遇到了同樣的問題,我來到這裏尋找答案。很高興它不只是我。 – SilentByte 2015-02-21 21:31:44
@StayFrosty它仍然沒有解決。主要的事實是,我不能再放任何時間了。 – 2015-03-08 10:23:05