Mi entorno de trabajo Eclipse se heliose, Android 1.6Cómo agregar editText.addTextChangedListener en TableLayout
He creado una TableLayout con columnas y filas agregó correctamente, cada célula tiene un TextView y uno EditarTexto y tengo un problema en la accediendo a cada celda y necesita agregar addTextChangedListener a cada editText dentro de la celda. Entonces, necesito cambiar el texto en inglés a texto índico. Sugiera una solución
/**
* 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);
}
}
¿Por qué lo hace programáticamente? En su lugar, puede crear un adaptador personalizado para ListView que tenga 1 edittext y textview para cada elemento, sería fácil en el diseño y la parte de desarrollo de ambos. –
gracias por la respuesta, en realidad estamos creando una aplicación de crucigramas, así que estoy haciendo esto. Esa fuente de crucigramas está en caracteres gujarati. También necesito cambiar el texto en la entrada de los usuarios. Es una especie de transliteración involucrada aquí. –
Eso significa que tiene filas * pantalla cols, digamos por ejemplo 4 * 4 –