2012-04-12 31 views
7

我的工作環境是Eclipse的heliose,Android 1.6的如何添加editText.addTextChangedListener在TableLayout

我創建了一個tableLayout列和行成功添加,每個單元都有一個TextView的,一個EditText上和我有一個問題訪問每個單元格並需要將addTextChangedListener添加到單元格內的每個editText。所以我需要將英文文本更改爲提示文本。請提出一個解決方案

/** 
* Here we are going to define the grid The Grid has 1. grid's value in the 
* particular position 2. 
*/ 

public void setGrid() { 

    String questionNumber[] = null; 

    Typeface fontface = Typeface.createFromAsset(getAssets(), "fonts/padmaa.ttf"); 
    /* 
    * Table layout for the crossword elements 
    */ 
    TableLayout tableLayout = (TableLayout) findViewById(R.id.crosswordTableLayout); 
    tableLayout.setGravity(Gravity.TOP); 
    tableLayout.setBackgroundColor(Color.WHITE); 
    tableLayout.setScrollContainer(true); 

    for (int i = 0; i < sizeOfGrid; i++) { 
     /* 
     * This table row params is used to set the layout params alone we 
     * are not going to use this anywhere 
     */ 
     TableRow.LayoutParams tableRowParams = new TableRow.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
     tableRowParams.setMargins(1, 1, 1, 1); 
     tableRowParams.height = 30; 
     tableRowParams.gravity = Gravity.TOP; 

     /* 
     * Defining the row element for the crossword 
     */ 
     TableRow tableRow = new TableRow(this); 
     tableRow.setBackgroundColor(Color.WHITE); 
     tableRow.setPadding(1, 0, 0, 0); 
     tableRow.setGravity(Gravity.TOP); 
     tableRow.setLayoutParams(tableRowParams); 

     for (int j = 0; j < sizeOfGrid; j++) { 

      /* 
      * (1).Here we are defining headerTextView to set the clue 
      * numbers. 
      * 2).columnEditText = a edit text view used to get the user 
      * i/p data 
      */ 
      TextView headerTextView = new TextView(this); 
      columnEditText = new EditText(this); 

      headerTextView.setGravity(Gravity.TOP); 
      headerTextView.setTextSize(10); 
      headerTextView.setEnabled(false); 
      headerTextView.setHeight(30); 
      headerTextView.setWidth(10); 
      headerTextView.setTextColor(Color.BLACK); 

      /* Override the edittext that has been created */ 
      columnEditText = (EditText) getLayoutInflater().inflate(R.layout.tablexml, null); 
      columnEditText.setHeight(30); 
      columnEditText.setWidth(25); 
      /* 
      * LinearLayout to arrange the two text view in a vertical 
      * position 
      */ 
      LinearLayout headerLinearLayout = new LinearLayout(tableRow.getContext()); 
      headerLinearLayout.setOrientation(LinearLayout.VERTICAL); 
      headerLinearLayout.addView(headerTextView); 

      /* 
      * LinearLayout to arrange the first Linearlayout and Edit text 
      * in a horizontal position 
      */ 
      LinearLayout cellLinearLayout = new LinearLayout(tableRow.getContext()); 
      cellLinearLayout.setOrientation(LinearLayout.HORIZONTAL); 
      cellLinearLayout.addView(headerLinearLayout); 
      cellLinearLayout.addView(columnEditText); 
      /* 
      * Here we are setting the table's vertical border by some 
      * workaround methods 
      */ 
      cellLinearLayout.setLayoutParams(tableRowParams); 
      /* 
      * the column with complete black 
      */ 
      if (cellValueArr[i][j] == null) { 
       columnEditText.setBackgroundColor(Color.BLACK); 
       headerTextView.setBackgroundColor(Color.BLACK); 
       headerTextView.setGravity(Gravity.TOP); 
       tableRow.setBackgroundColor(Color.BLACK); 
       columnEditText.setEnabled(false); 
      } else { 
       /* 
       * column with values and question numbers 
       */ 
       tableRow.setBackgroundColor(Color.BLACK); 
       if (quesNumArr[i][j] == null) { 
        columnEditText.setBackgroundColor(Color.WHITE); 
        headerTextView.setBackgroundColor(Color.WHITE); 
       } else if (quesNumArr[i][j] != null) { 
        /* 
        * column without question number 
        */ 
        questionNumber = quesNumArr[i][j].split("~"); 
        quesArrList.add(questionNumber[1]); 
        headerTextView.setText(questionNumber[1]); 
        headerTextView.setTextColor(Color.BLACK); 
        headerTextView.setBackgroundColor(Color.WHITE); 
        columnEditText.setBackgroundColor(Color.WHITE); 
       } 

      } 
      columnEditText.setId(i); 
      headerTextView.setId(i); 

      /* add the linear layout to the row values */ 
      tableRow.addView(cellLinearLayout); 

      int childCount = tableRow.getChildCount(); 
      System.out.println("Child Count ::" + childCount); 

      LinearLayout linearChild = (LinearLayout) tableRow.getChildAt(columnEditText.getId()); 
      colText = (EditText) linearChild.getChildAt(1); 
      System.out.println("GET ID " + linearChild.getChildAt(1).getId()); 

      colText.addTextChangedListener(new TextWatcher() { 
       @Override 
       public void onTextChanged(CharSequence seq, int start, int before, int count) { 
        // TODO Auto-generated method stub 
        if (seq.length() > 0 & before == 0) { 
         final String charSequence = String.valueOf(seq); 
         final String engChar = String.valueOf(seq.charAt(seq.length() - 1)); 
         println("GUJ :: currentlatin ===> " + engChar + " :: charSequence ==>" + seq); 
         // Method For Type Char 
         List softList = conv.getSoftKeyPressForChar(engChar, getApplicationContext(), seq); 
         charSeq = (String) softList.get(0); 
         Typeface fontface1 = Typeface.createFromAsset(getApplicationContext().getAssets(), "fonts/padmaa.ttf"); 
         colText.setTypeface(fontface1, Typeface.NORMAL); 
         colText.setText(charSeq); 
         // for placing the cursor position 
         colText.clearFocus(); 
         colText.requestFocus(); 

        } 
       } 

       @Override 
       public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void afterTextChanged(Editable s) { 
        // TODO Auto-generated method stub 
        System.out.println("AFTER TEXT CHANGE"); 
       } 
      }); 

     } 
     /* add the row values to the table layout */ 
     tableLayout.addView(tableRow); 
    } 
} 
+0

你爲什麼要以編程方式做這件事?相反,您可以爲ListView創建一個自定義適配器,每個項目都有一個edittext和textview,這在設計和開發部分都很容易。 – 2012-04-12 07:09:58

+0

感謝您的回覆,實際上我們正在創建一個填字遊戲應用程序,所以我就是這樣做的。這個填字遊戲的字體是古吉拉特文字。所以需要更改用戶輸入的文字,它是一種涉及此處的音譯。 – 2012-04-12 09:49:25

+0

這意味着你有行* cols屏幕,比如說4 * 4 – 2012-04-12 10:04:49

回答

0

我沒有通過代碼的整體外觀。但是從我的初步瞭解,你可以做任何的這些方式,

  1. 正如前面提到的一個人,去一個gridview。我無法從最後一個評論中解決這個問題,但如果它出現了一些滾動問題,您可以嘗試將版面邊距底部設置爲5 dp,這樣它就不會被裁剪(如果這樣你的意思是)

  2. 繼續使用表格佈局,創建一次TextWatcher()並在循環中依次添加它。這可能是好的,如果你可以爲每個元素設置setId或setTag,比如第一個editText獲取名稱,「editText1」,然後是「editText2」等等。因此,在循環中,您可以根據循環索引訪問每個元素。

相關問題