将EditText限制为带符号的十进制数

时间:2013-01-09 15:38:01

标签: android android-widget

我正在编写的应用程序必须向用户显示一个动态创建的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进行签名,但不能使用带符号的十进制数。代码有什么问题?

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:6)

试试这个:

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

参考:setRawInputType

修改

我尝试了这个,它对我有用。

请确保:

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

感谢。

答案 2 :(得分:0)

这确实是亚马逊Android中的一个错误。因为我正在为自己编写应用程序,所以有一个非常适合我的解决方法:

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