在横向模式下隐藏了分配了InputFilter / Decimal分隔符的EditText

时间:2013-10-06 11:42:56

标签: android android-layout android-edittext

我正在编写一个在我正在编写的应用程序中使用EditFilter的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" >

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分配给相关活动

中的EditText
getValue().setFilters(
            new InputFilter[] { new MoneyFilter(decimalSeperator) });
从区域设置中读取

decimalSeparator ,并且 getValue()只需调用 findViewById(...),并将一些转换为正确的类型。

一般来说,我的实现似乎完全按照假设工作,但它显示了一个奇怪的行为。当已输入小数点分隔符并且屏幕方向更改为横向模式时,它将被隐藏,所有数字都保持可见。一旦方向改变回纵向模式,它就会再次显示。我甚至可以在横向模式下输入小数点分隔符,虽然它不会显示在EditText中,直到设备回到纵向模式。

我可以在Android 4.3设备和API级别为18和10的模拟器中重现该行为。从EditText中删除android:digits和/或android:inputType,不会更改此行为,其他EditText小部件不带InputFilter表现完全正常,所以我猜它与某个过滤器有某种关系。

几个小时的研究没有带来任何有用的东西,所以一些帮助表示赞赏:)如果您需要更多信息或代码,请告诉我。

的问候,

汉斯

1 个答案:

答案 0 :(得分:3)

好像你正面临一个谷歌长期忽视修复的已知问题(https://code.google.com/p/android/issues/detail?id=2626)。

在横向模式下,IME默认为全屏或技术上,ExtractEditText不符合区域设置。

您可以通过禁用ExtractEditText来解决此问题,如下所示: 机器人:imeOptions = “flagNoExtractUi”