Cómo agregar otro EditText cuando haga clic y llenar otro (Android)
Yo estaba googling por un tiempo, pero no puedo encontrar la forma de agregar un otro EditText después de hacer clic en uno.
Trato de describir mi problema por esta imagen:
- ¿Cómo tot desplazarse al final de un android TextView?
- ¿Mueve los diseños cuando se muestra el teclado suave?
- Aplicación basada en mosaico de Android para la aplicación
- Vista personalizada como bloqueo / desbloqueo de la pantalla de Android
- Trabajar con diseñadores de Android
¿Hay algún contenedor que proporcione esta funcionalidad?
- Desplazamiento de texto por encima de los botones, botones fijos en la parte inferior
- Scrollview con linea flotante lineal no se desplaza
- ¿Cómo probar si una vista fragmentada es visible para el usuario?
- Creación de activos de Android (LPDI, MDPI, HDPI, XHDPI) para una aplicación?
- Emular categoría / preferencia de Android
- ¿Cómo se muestra el valor actual de una preferencia de Android en el resumen de preferencias?
- La vista no puede anclarse en el parámetro CoordinatorLayout principal
- Android: Cardview El fondo se está convirtiendo en negro en 4.1.2
Mira esto:
public class YourActivity extends Activity { private LinearLayout holder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_activity); //get a reference to the LinearLayout - the holder of our views holder = (LinearLayout) findViewById(R.id.holder); addNewEdit(); } private void addNewEdit() { //inflate a new EditText from the layout final EditText newEdit = (EditText) getLayoutInflater().inflate(R.layout.new_edit, holder, false); //add it to the holder holder.addView(newEdit); //set the text change lisnter newEdit.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) { //here we decide if we have to add a new EditText view or to //remove the current if (s.length() == 0 && holder.getChildCount() > 1) { holder.removeView(newEdit); } else if (s.length() > 0 && ((before + start) == 0)) { addNewEdit(); } } @Override public void afterTextChanged(Editable s) { } }); } }
El your_activity.xml
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/holder" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout>
Y el new_edit.xml
:
<EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> </EditText>
EDIT: Por supuesto, usted tiene que establecer los rellenos correctos / márgenes, y probablemente crear sus propios diseños y estilo para el titular y los elementos que inflar.
Puede agregar todos los 5 a su XML y asignar a android:visibility="gone"
a todos, pero primero uno. A continuación, debe asignar un TextWatcher a cada uno de ellos, pero por la simplicidad sólo se mostrará para uno.
et1.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { et2.setVisibility(TextUtils.isEmpty(s.toString()) ? View.GONE : View.VISIBLE); // The rest of them also??? } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } });
Si no desea un número fijo de ellos, deseará crear programáticamente EditTexts y luego agregarlos a uno de los ViewGroups (RelativeLayout, LinearLayout, FrameLayout, …) llamando addView
método addView
- Constante de alcance para correo electrónico con GoogleApiClient.Builder
- Cómo cambiar el color por defecto cuando el interruptor está "on" (azul a verde) en formas xamarin. En defecto del ios es GReen pero en androide es azul