Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


La ventana emergente AutoCompleteTextView de Android se mueve tras mostrar

Cuando uso el autocompletetextview todo funciona bien, excepto que mantiene el cambio entre dos posiciones: la correcta justo debajo de la vista de texto y un poco más baja. Comienza mal, pero casi inmediatamente se mueve a la posición correcta. Sin embargo esto es muy molesto al escribir o retroceder como sucede para cada letra. Estoy usando android studio.

Parece como si dos eventos simultáneamente están tratando de decidir el diseño. A veces se pega en una posición u otra.

** He ralentizado el proceso de filtrado con un adaptador personalizado y parece que cuando se ingresa texto se mueve a la posición incorrecta, y luego cuando el filtrado se hace se mueve de nuevo a la posición correcta.

Incorrecto

Incorrecto

Correcto:

Correcto

Java (en OnCreate ()) –

String[] drugs = new String[]{"Nexium","Amoxicillin","LEVOCETIRIZINE DIHYDROCHLORIDE", "Advil", "Advair Diskus", "Daraprim"}; AutoCompleteTextView drugNameAutoComplete = ((AutoCompleteTextView) findViewById(R.id.drugNameEditText)); drugNameAutoComplete.setAnimation(null); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,drugs); drugNameAutoComplete.setAdapter(adapter); 

Y el código de diseño-

 <AutoCompleteTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/drugNameEditText" android:enabled="true" android:singleLine="true" android:layout_below="@+id/lookingForView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:dropDownVerticalOffset="50dp" android:hint="@string/drug_name" /> 

Si quito el dropDownVeticalOffset consigo el parpadeo entre el valor correcto y esto-

Introduzca aquí la descripción de la imagen

  • ¿Cómo uso tabHost para Android
  • Alinea el texto dentro de un botón en Android
  • Eliminar una cadena en todos los idiomas Android
  • Xml getText devolver null - Android
  • Cambiar el radio de la esquina de programación programable
  • Utilice el cuadro combinado Tema encima del diseño para elegir un diseño diferente o corrija las referencias de estilos del tema
  • No se puede acceder a android / drawable Icon-Resource
  • CollapsingToolbarLayout | Problemas de desplazamiento y diseño 2
  • 5 Solutions collect form web for “La ventana emergente AutoCompleteTextView de Android se mueve tras mostrar”

    Para cambiar esta posición use el atributo dropDownAnchor y haga referencia a otro id de vista. (Vista bajo autocompletar)

    Android: dropDownAnchor

    Ver para anclar la lista desplegable de autocompletar. Si no se especifica, se utiliza la vista de texto en sí.

    Y tienes muchos atributos para la lista desplegable.

    Es mejor utilizar el filtro de implementar para completar automáticamente el adaptador y pasar el texto introducido de OnQueryTextListener de autocompletar y establecer el texto seleccionado llamando a adapter.getitem.

    Cambie su xml to-

     <AutoCompleteTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/drugNameEditText" android:enabled="true" android:singleLine="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" **android:dropDownVerticalOffset="0dp"** **android:dropDownAnchor="@id/drugNameEditText"** android:hint="drug" /> 

    ¿Has utilizado por casualidad el mismo id en el otro AutoCompleteTextView? Puedo reproducir el comportamiento que describes incluyendo dos vistas con el mismo id.

    Tuve el mismo problema en mi final con la API más reciente por alguna razón. Resolví el problema estableciendo explícitamente dropDownAnchor , dropDownVerticalOffset y dropDownHeight en el evento XML y onTextChanged.

    Edit: Después de algunas comprobaciones, parece que este comportamiento es INCONSISTENTE ENTRE APIs que comienzan con Marshmallow (API 23). Intente cambiar su código a lo siguiente:

     final float scale = context.getResources().getDisplayMetrics().density; int verticalOffsetDP; int dropDownHeightDP = (int) (200 * scale + 0.5f); int currentApiVersion = android.os.Build.VERSION.SDK_INT; if (currentApiVersion < Build.VERSION_CODES.M) { // Prior to Marshmallow DropDownVerticalOffset works as expected verticalOffset = 0; } else { // Marshmallow has some weird DropDownVerticalOffset behavior so we have to compensate verticalOffset = (int) (50 * scale + 0.5f); } AutoCompleteTextView drugNameAutoComplete = ((AutoCompleteTextView)findViewById(R.id.drugNameEditText)); drugNameAutoComplete.setAnimation(null); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,drugs); drugNameAutoComplete.setAdapter(adapter); drugNameAutoComplete.setDropDownAnchor(R.id.drugNameEditText); drugNameAutoComplete.setDropDownVerticalOffset(verticalOffsetDP); drugNameAutoComplete.setDropDownHeight(dropDownHeightDP); 

    Y su XML a lo siguiente:

     <AutoCompleteTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/drugNameEditText" android:enabled="true" android:singleLine="true" android:layout_below="@+id/lookingForView" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:dropDownVerticalOffset="50dp" android:dropDownAnchor="@id/drugNameEditText" android:dropDownHeight="200dp" android:hint="@string/drug_name" /> 

    Tenga en cuenta que tiene que calcular DP basado en dimensiones de pantalla en código. Tengo el ejemplo del código de la excelente respuesta aceptada en este hilo: Android y la configuración de ancho y altura de forma programática en unidades dp

    La razón por la que tienes que establecer dropDownHeight también es porque de lo contrario Android tiene un comportamiento para empujar hasta la parte superior de la pantalla si la lista se extiende más allá de los límites de altura de la vista, lo que complica aún más los problemas de movimiento. Si realmente no le importa esto (algunas personas no lo hacen, depende de su configuración de vista), puede quitar dropDownHeight tanto de programación y XML.

    Debo señalar que estos cambios todavía no hacen las cosas exactamente iguales entre Marshmallow y otras API. Parece que todavía hay una diferencia de unos pocos píxeles. Pero se pone muy cerca.

    Tuve el mismo problema y muchas horas más tarde he encontrado la solución.

    Usted debe cambiar:

    android:layout_width="wrap_content" en android:layout_width="match_parent"

    Espero que funcione para ti tambien.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.