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


¿Por qué el teclado se superpone en AutoCompleteTextView cuando está dentro de ScrollView?

Tengo un diseño androide simple y código, pero el teclado siempre se superponen a mi AutoCompleteTextView cuando hago clic en él. Nota: El AutoCompleteTextView cuando está dentro de ScrollView. Nota: la plataforma es 6.0.1

 package com.example.jason_wu.search; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.AutoCompleteTextView; public class Main2Activity extends AppCompatActivity { private AutoCompleteTextView mAtv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); mAtv = (AutoCompleteTextView) findViewById(R.id.location_auto_complete); //issue 1 //mAtv.setBackground(getDrawable(R.drawable.search_input_focus)); //issue 2 mAtv.setHeight(300); } } 

Y mi AndroidManifest.xml aquí:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.jason_wu.search"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="com.example.jason_wu.search.Main2Activity" android:windowSoftInputMode="adjustPan" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> 

Layout.xml:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/scrollView" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="800dp" android:text="Large Text" android:id="@+id/textView"/> <AutoCompleteTextView android:id="@+id/location_auto_complete" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_below="@+id/textView" android:background="@color/transparent" android:dropDownAnchor="@+id/location_auto_complete" android:dropDownHeight="wrap_content" android:dropDownVerticalOffset="1dip" android:fontFamily="sans-serif-light" android:hint="@string/new_notification_location_hint" android:imeOptions="actionSearch" android:inputType="textUri" android:dropDownSelector="@color/location_bg_select" android:popupBackground="@color/location_bg_notselect" android:singleLine="true" android:textColor="#FFFFFF" android:alpha="0.2" android:textColorHint="#999999" android:textCursorDrawable="@null" android:textSize="15sp" /> <TextView android:layout_width="wrap_content" android:layout_height="100dp" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/textView2" android:layout_below="@+id/location_auto_complete" /> </RelativeLayout> </ScrollView> </RelativeLayout> 

Ver Número 2

3 Solutions collect form web for “¿Por qué el teclado se superpone en AutoCompleteTextView cuando está dentro de ScrollView?”

Intente limitar los elementos desplegables para mostrar

Una forma es que puedes Limitar los elementos desplegables para mostrar. Pero no hay una forma tan apropiada para mostrar el número de la opción maximumSuggestions, pero el truco que puedes aplicar es obtener la altura de una de las filas y multiplicarla (número de filas para mostrar) veces y usar setDropDownHeight() para establecer su altura .

Hay un método setDropDownHeight de la clase AutoCompleteTextView . Puedes verlos y usarlos.

Si está confundido o no está seguro de la altura de los elementos de sugerencias, puede personalizarlo. Eche un vistazo a cómo configurar la altura personalizada.

Pruebe este atributo a la actividad en el archivo AndroidManifest.xml

 android:windowSoftInputMode="stateHidden|adjustPan" 

Debería verse algo así.

  <activity android:name="com.myexample.TestActivity" android:label="@string/login_screen" android:screenOrientation="portrait" // well you can change the orientation if you want android:windowSoftInputMode="stateHidden|adjustPan" /> 

El atributo con el que desea jugar es que windowSoftInputMode intente valores diferentes ya que puede requerir salida diferente después de cierto tiempo.

 adjustPan 

La ventana principal de la actividad no se redimensiona para hacer espacio para el teclado suave. Por el contrario, el contenido de la ventana se cuelga automáticamente para que el enfoque actual nunca sea oscurecido por el teclado y los usuarios siempre pueden ver lo que están escribiendo. Esto es generalmente menos deseable que el cambio de tamaño, porque el usuario puede necesitar cerrar el teclado suave para obtener e interactuar con partes oscurecidas de la ventana.

 adjustResize 

La ventana principal de la actividad siempre se redimensiona para hacer espacio para el teclado virtual en la pantalla.

 stateHidden 

El teclado virtual se oculta cuando el usuario elige la actividad, es decir, cuando el usuario navega afirmativamente hacia la actividad, en lugar de retroceder en ella por haber dejado otra actividad.

Puede encontrar más detalles sobre la documentación de elementos de actividad

Actualizar

He escrito algo que podría ayudarle, el diseño está disponible en el diseño

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="activities.list.first.TestLayoutActivity"> <ScrollView android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:layout_weight="1"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.6" android:orientation="vertical"> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="New Text" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.4" android:orientation="vertical"> <AutoCompleteTextView android:id="@+id/TestLayoutActivity_autoCompleteTextView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:completionThreshold="1" android:drawableLeft="@android:drawable/ic_menu_search" android:text="" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Large Text" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> </LinearLayout> </ScrollView> </LinearLayout> 

AndroidManifest.xml

  <activity android:name="activities.list.first.TestLayoutActivity" android:label="@string/title_activity_test_layout" android:windowSoftInputMode="stateHidden|adjustPan" /> 

El código está en el código

  String[] list = {"match1", "match2", "match3", "match12", "match11", "match8", "match7", "match4", "match13", "match10", "match9", "match6", "match5",}; AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.TestLayoutActivity_autoCompleteTextView); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.simple_list_item_1, list); autoCompleteTextView.setAdapter(adapter); Before 

antes de

 After 

[ después]

El comportamiento del teclado es que desplaza la vista para cerrar la parte inferior del área de texto.

Finalmente, tenemos que usar el atributo android:gravity="bottom" para resolver el problema de la interfaz de usuario, pero tenemos que considerar el UX, ex: Hint.

Por lo tanto, la solución es escuchar onClick() y para el tema del teclado, tenemos que utilizar el método dinámico para establecer la gravedad.

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