3

我正在编写必须向用户显示动态创建的 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,但不能限制为带符号的十进制。代码有什么问题?

4

3 回答 3

11

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

于 2013-11-21T08:44:06.360 回答
9

尝试这个:

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

参考:setRawInputType

编辑:

我试过这个,它对我有用。

只要确定这一点:

您必须android:inputType从文件的编辑文本中删除此属性。否则不会反映更改。et xml layoutsetRawInputType

谢谢。

于 2013-01-09T16:06:23.227 回答
0

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

  1. InputType.TYPE_CLASS_PHONE
  2. 实施自定义密钥过滤器以强制执行正确的格式。我用过这个
于 2013-01-09T16:44:14.593 回答