gpt4 book ai didi

android - 分配了 InputFilter 的 EditText/在横向模式下隐藏小数点分隔符

转载 作者:行者123 更新时间:2023-11-29 16:05:22 24 4
gpt4 key购买 nike

我在编写的应用程序中遇到了一个非常奇怪的问题,即 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com