2013-01-09 70 views
0

我正在編寫必須向用戶顯示EditText小部件的動態創建表的應用程序。將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簽名,但不簽名爲十進制。代碼有什麼問題?

+2

我真的沒有看到您的代碼有任何問題。你可以嘗試使用.setRawInputType();相反,如果這也不起作用,它可能是Amazone搞砸了Kindle –

回答

6

試試這個:

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

參考:setRawInputType

編輯:

我嘗試這樣做,它爲我工作。

只要確保這一點:

你必須從你的et的EditTextxml layout文件中刪除此屬性android:inputType。否則setRawInputType的變化將不會被反映。

謝謝。

+0

這通常工作,但減號和點插入作爲未知字符到EditText。 – bvk256

+0

@ bvk256請參閱我發佈的解決方案的編輯。這對我來說很完美。 –

+0

XML佈局文件中沒有任何EditText的定義,因爲它們都是在運行時期間動態創建的。 – bvk256

0

事實證明,這是亞馬遜Android系統中的一個錯誤。因爲我在寫我自己的應用程序有一個小的解決方法是完全適合我:

  1. 套裝InputType.TYPE_CLASS_PHONE
  2. 實現自定義鍵過濾器來執行正確的格式。我用this one
5

這是非常重要的ALWAYS已經InputType.TYPE_CLASS_NUMBER其他選項前:InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL,否則鍵盤不會數值!

+1

這是一個常規的OR操作。訂單根本無關緊要。 A + B與B + A相同。 –

相關問題