我想要创建一个输入过滤器,以添加一个车辆号码。我想实现这个视频演示,但是我的代码并不适用于所有的键盘。下面代码中的"source“变量值并不是所有键盘的相同值。
编辑:
例如,假设用户希望输入“MH19”。如果用户按"1",那么在“”中,"source“变量的值显示"1”,而在"SwiftKey键盘“中,"source”变量的值显示"MH1“。
SpacesInputFilter.java
public class SpacesInputFilter implements InputFilter {
private final int max;
private final int[] spaces;
private final char space;
public SpacesInputFilter(int max, int[] spaces, char space) {
this.max = max;
this.spaces = spaces;
this.space = space;
}
@Override
public CharSequence filter(CharSequence source,
int start,
int end,
Spanned dest,
int dstart,
int dend) {
if (dest != null && dest.toString().trim().length() > max) {
return null;
}
if (source.length() == 1 && contains(dstart, spaces) && source.charAt(0) != space) {
return space + source.toString();
}
// handle copy-paste case
int spacesCount = 0;
if (start == 0 && source.length() == end) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < source.length(); i++) {
char symbol = source.charAt(i);
if (contains(i + spacesCount, spaces) && symbol != space) {
spacesCount++;
sb.append(space);
}
sb.append(symbol);
}
return sb.toString();
}
//unhandled: partial copy-paste
return null; // keep original
}
private boolean contains(int i, int[] array) {
for (int j: array) {
if (j == i) {
return true;
}
}
return false;
}
}MainActivity.java
edtVehicleNumber.setFilters(new InputFilter[] {
new InputFilter.LengthFilter(13),
new SpacesInputFilter(13, new int[]{2, 5, 8}, ' '),
});发布于 2020-07-20 12:08:52
我已经解决了这个问题。实际上,问题是,软件键盘在用户输入时自己做一些活动。这些活动旨在改进经验。我们需要以某种方式禁用这些活动,以便获得原始输入。
所以这对我有用,
editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);https://stackoverflow.com/questions/62993238
复制相似问题