- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在编写的应用程序中遇到了一个非常奇怪的问题,即 EditText 分配了 InputFilter。这个想法是,拥有一个 EditText,根据用户的区域设置,它只接受十进制数字作为输入,最多两位小数和小数点分隔符。下面是相关的代码 fragment
我布局中的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" >
InputFilter 实现
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 "";
}
}
}
并将 InputFilter 分配给相关 Activity 中的 EditText
getValue().setFilters(
new InputFilter[] { new MoneyFilter(decimalSeperator) });
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"
关于android - 分配了 InputFilter 的 EditText/在横向模式下隐藏小数点分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19208491/
在某些 Android 设备上,我在 InputFilter 内遇到了 IndexOutOfBoundsException,我用它来删除输入开头的任何零: 我的代码: zeroFilter =
我正在使用 InputFilter 类制作一个支持数字分组的屏蔽 EditText。例如,当用户插入“12345”时,我想在 EditText 中显示“12,345”。我该如何实现? 这是我的不完整代
我为 EditText 组件创建了一个 InputFilter,它只允许在一个范围内(例如从 1.5 到 5.5)出现 double 值。一切正常,直到我删除了小数点: 我输入了 1.68,然后删除了
我正在寻找 Jetpack Compose TextField 中 EditText 的 InputFilter 的等效方法。 因为我试图阻止用户输入不需要的值,例如 %@*()-以字符为例。 最佳答
$app->post('/', function () use ($app) { $email = new Input('email'); $email->getValidatorCh
我在这样的表单条目上有一个验证器: $this->add(array( 'name' => 'email', 'required' => true,
$app->post('/', function () use ($app) { $email = new Input('email'); $email->getValidatorCh
我在这样的表单条目上有一个验证器: $this->add(array( 'name' => 'email', 'required' => true,
到目前为止,我一直在将输入过滤器绑定(bind)到模块中的表单,换句话说,我一直在表单中创建元素,将输入过滤器添加到模块端的元素。 例如检查这个example 现在我正在根据需要动态创建文本字段元素,
在我的 ZF2 应用程序中,我有一个包含多个可选字段的表单。如果用户决定将该字段留空,那么它应该在数据库中将其设置为 NULL,但是 - 它不起作用。 示例字段: $this->add(array(
我想将 InputFilter 应用于我的 EditTextPreferences... 在我使用 PreferenceActivity 之前,我有 EditTexts 和这样的过滤器:
int maxLength = 20; private String blockCharacterSet = "~#^|$%'&*!;"; private InputFilter filter = n
我正在尝试实现一个 EditText,它将输入限制为仅字母字符 [A-Za-z]。 我从 this post 中的 InputFilter 方法开始.当我键入“a%”时,文本消失,然后如果我按退格键,
我正在尝试实现一个 EditText,它将输入限制为仅包含数字的大写字符 [A-Z0-9]。 我从一些帖子的 InputFilter 方法开始。但在这里我在 Samsung Galaxy Tab 2
street = (EditText) findViewById(R.id.street); InputFilter filter = new InputFilter() { public C
假设我有一个 EditText,我想将它限制为 0-9 和 A-F(含),用于十六进制输入。有什么办法可以做到吗?我试着查看 InputFilters,但我不确定这是正确的方法。有人做到了吗? 最佳答
是否有可能有 InputFilters 列表,例如只允许输入,例如$1,01 或 $100,95 已完成 editText.filters = arrayOf(CurrencyFormatInputF
我正在尝试自定义默认错误消息“Value is required and can't be empty” 在 zf2 我正在使用以下代码在 inputfilter 的验证器中添加自定义默认错误消息 $
所以我得到了一个 ZF2 应用程序,在我拥有的 InputFilter 中得到了一个 Form 和一个 InputFilter: $this->add( array(
我在编写的应用程序中遇到了一个非常奇怪的问题,即 EditText 分配了 InputFilter。这个想法是,拥有一个 EditText,根据用户的区域设置,它只接受十进制数字作为输入,最多两位小数
我是一名优秀的程序员,十分优秀!