2012-04-12 65 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”等等。因此,在循环中,您可以根据循环索引访问每个元素。