Cursor no es visible en EditText cuando se agrega dinámicamente la vista
Tengo un TableLayout
y la visión dinámica se agrega en la disposición. Siempre que la disposición tenga un cursor de EditText
no es visible en EditText
pero el cursor es visible encima del EditText
que es TextView
.
He añadido onClick
evento, archivo XML para Edittext
y Textview
y archivo XML para el diseño principal.
- Cómo establecer divisor entre columnas en tablelayout?
- Alineación de la disposición de la tabla de Android
- Cómo dar frontera para tablerow en tablelayout en android?
- Cómo llenar la pantalla con cuatro botones con el diseño de la tabla?
- Cómo inflar vista desde XML en Android?
Mi oyente de texto:
textView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { textView.setSelection(textView.getText().toString().length()); textView.requestFocus(); textView.requestFocusFromTouch(); textView.setCursorVisible(true); return false; } });
Archivo XML:
<ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:scrollbars="vertical" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_margin="10dp" android:focusable="true" android:focusableInTouchMode="false" android:text="@string/title_form_details" android:textSize="25dp" /> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fieldsContainer" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="vertical" android:shrinkColumns="1" android:stretchColumns="1" > </TableLayout> </LinearLayout> </ScrollView>
TextView
XML de TextView
:
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/label" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical|left" android:paddingBottom="0dp" android:paddingLeft="5dp" android:paddingRight="5dp" android:paddingTop="5dp" />
EditText
XML de EditText
:
<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/control" android:layout_width="fill_parent" android:layout_height="wrap_content" android:cursorVisible="true" android:textColor="#000000" android:textCursorDrawable="@null" />
De forma dinámica estoy añadiendo TextView
y en la fila siguiente estoy añadiendo Edittext
vista, pero siempre que EditText
clic en EditText
, el cursor es visible en TextView
.
- Hacer células de igual anchura y altura para llenar la tabla
- Cómo crear una tabla en Android con varias columnas?
- Android - Tabla de estilos TableLayout
- GridView o TableLayout?
- Agregar espacio entre columnas de un TableLayout
- Borde de elementos de la fila de tabla en android
- (TableLayout) findViewById (excepción de puntero nulo
- ¿Es posible especificar la altura de TableRow?
Esta solución funcionó para mí.
textView.setText("text"); textView.post(new Runnable() { @Override public void run() { textView.setSelection(textView.getText().toString().length()); } });
Está estableciendo la visibilidad del cursor en textview , por lo que es visible en TextView
Eliminar esta línea de su código
textView.setCursorVisible(true);
textView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { textView.setSelection(textView.getText().toString().length()); textView.requestFocus(); textView.requestFocusFromTouch(); //textView.setCursorVisible(true); return false; } });
Y tratar de establecer la visibilidad a edittext
edittext .setCursorVisible(true);
Intente agregar un <requestFocus /> en su edittext. Tal vez funciona.
Intenta llamar a setTextIsSelectable dentro de onTouchListener
editText.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { editText.setTextIsSelectable(true); return false; } });
Eliminar esta línea:
textView.setCursorVisible(true);
Entonces funciona.
Este error es uno de los más ridículos en Android, supongo …
Aquí es cómo lo manejé:
public void addEditText(LinearLayout linearLayout, final View view) { final EditText editText = new EditText(getActivity()); linearLayout.addView(textView); linearLayout.addView(editText); Utils.runDelayed(new Callable() { @Override public Object call() throws Exception { if (editText.getText() == null || editText.getText().toString().isEmpty()) { editText.setText(""); editText.setSelection(editText.getText().toString().length()); editText.setCursorVisible(true); editText.setTextIsSelectable(true); editText.setInputType(InputType.TYPE_CLASS_TEXT); } return null; } }, 10); editText.setTextAppearance(R.style.LargeEditText); editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { } }); }
El ayudante:
/** * Run delayed. * * @param callable the callable * @param delay the delay */ public static void runDelayed(final Callable callable, long delay) { final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { try { callable.call(); } catch (Exception e) { e.printStackTrace(); } } }, delay); }
- ¿Cómo configurar la aplicación para que sea sólo de retrato?
- Layout_height siempre envuelve el contenido