【问题标题】:Restrict EditText to signed decimal numbers将 EditText 限制为带符号的十进制数
【发布时间】:2013-01-09 15:38:01
【问题描述】:

我正在编写必须向用户显示动态创建的 EditText 小部件表的应用程序。

我当前的代码:

      /**
      * Create and display the table of EditTexts on the screen
      * @param x Number of columns
      * @param y Number of rows
      */
        private void createTable(int x, int y) {
            TableLayout table = (TableLayout) findViewById(R.id.TableLayout01);
            etGrid = new EditText[y][x];
            for (int i = 0; i < y; i++) {
                TableRow row = new TableRow(this);
                for (int j = 0; j < x; j++) {
                    EditText et = new EditText(this);

                    et.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL 
                              | InputType.TYPE_NUMBER_FLAG_SIGNED);

                    et.setSingleLine();
                    et.setMinimumWidth(getWindowManager().getDefaultDisplay().getWidth()/x);
                    etGrid[i][j] = et;
                    row.addView(et);
                }
                table.addView(row,new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
            }

        }

问题出在这一行,根本不起作用:

et.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL 
                                  | InputType.TYPE_NUMBER_FLAG_SIGNED);

在我的 Kindle Fire 上,我可以使用 InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL 限制为十进制值或使用 InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED 签名,但不能使用带符号的十进制。代码有什么问题?

【问题讨论】:

  • 我真的看不出你的代码有什么问题。您可以尝试使用 .setRawInputType();相反,但如果这也不起作用,那可能是 Amazone 搞砸了 Kindle

标签: android android-widget


【解决方案1】:

总是在其他选项之前有InputType.TYPE_CLASS_NUMBER 非常重要:InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL,否则键盘将不是数字!

【讨论】:

  • 这是一个常规的 OR 操作。顺序根本不重要。 A + B 与 B + A 相同。
【解决方案2】:

试试这个:

et.setRawInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL);

参考:setRawInputType

编辑:

我试过了,它对我有用。

只要确定这一点:

您必须从et 中删除此属性android:inputType edittextxml layout 文件。否则setRawInputType 的更改将不会被反映。

谢谢。

【讨论】:

  • 这通常有效,但减号和点会作为未知字符插入到 EditText 中。
  • @bvk256 请查看我发布的解决方案的编辑。这非常适合我。
  • XML布局文件中没有任何EditText的定义,因为它们都是在运行时动态创建的。
【解决方案3】:

这确实是亚马逊安卓系统中的一个错误。由于我正在为自己编写应用程序,因此有一个非常适合我的解决方法:

  1. 设置InputType.TYPE_CLASS_PHONE
  2. 实施自定义键过滤器以强制使用正确的格式。我用过this one

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-04
    • 2014-02-15
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多