Han*_*eld 2 android android-layout android-edittext
在我正在编写的应用程序中,我遇到了一个带有指定 InputFilter 的 EditText 的非常奇怪的问题。这个想法是,有一个 EditText,它只接受十进制数字作为输入,根据用户的区域设置,最多有两个小数位和一个小数分隔符。这是相关的代码片段
我的布局中的 EditText
<EditText
android:id="@+id/value"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="01234567890,."
android:inputType="number|numberDecimal"
android:nextFocusForward="@+id/category" >
Run Code Online (Sandbox Code Playgroud)
输入过滤器实现
public class MoneyFilter implements InputFilter {
private String testRegex;
public MoneyFilter(String decimalSep) {
testRegex = "^\\d+\\" + decimalSep + "?\\d{0,2}$";
}
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
String s = source.toString();
String d = dest.toString();
String r = d.substring(0, dstart) + s.substring(start, end)
+ d.substring(dend);
if (r.matches(testRegex)) {
return null;
} else {
return "";
}
}
}
Run Code Online (Sandbox Code Playgroud)
以及在相关活动中将 InputFilter 分配给我的 EditText
getValue().setFilters(
new InputFilter[] { new MoneyFilter(decimalSeperator) });
Run Code Online (Sandbox Code Playgroud)
decimalSeparator从语言环境设置中读取,getValue()只是调用findViewById(...)并进行一些转换为正确的类型。
一般来说,我的实现似乎完全按预期工作,但它显示了一种奇怪的行为。当小数点分隔符已经输入并且屏幕方向更改为横向模式时,它被隐藏,所有数字保持可见。一旦方向更改回纵向模式,它就会再次显示。我什至可以在横向模式下输入小数点分隔符,尽管它不会显示在 EditText 中,直到设备恢复为纵向模式。
我可以在我的 Android 4.3 设备和 API 级别 18 和 10 的模拟器中重现该行为。从 EditText 中删除 android:digits 和/或 android:inputType,不会改变这种行为,其他没有 InputFilter 的 EditText 小部件的行为完全正常,所以我想它与那个过滤器有某种关系。
几个小时的研究没有带来任何有用的东西,因此感谢您的帮助:) 如果您需要更多信息或代码,请告诉我。
问候,
汉斯
似乎您正面临一个已知问题(https://code.google.com/p/android/issues/detail?id=2626),而 Google 长期以来一直忽视该问题。
在横向模式下,IME 默认为全屏或从技术上讲,不支持区域设置的 ExtractEditText。
您可以通过如下禁用 ExtractEditText 来解决此问题:android:imeOptions="flagNoExtractUi"
| 归档时间: |
|
| 查看次数: |
2413 次 |
| 最近记录: |