Почему клавиатура перекрывается в AutoCompleteTextView, когда внутри ScrollView

У меня простая форма и код для Android, но клавиатура всегда перекрывает мой AutoCompleteTextView когда я нажимаю на нее. Примечание: AutoCompleteTextView, когда внутри ScrollView. Примечание: платформа 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); } } 

И мой AndroidManifest.xml здесь:

 <?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> 

Видеть Выпуск 2

Попробуйте ограничить выпадающие элементы, чтобы показать

Один из способов – вы можете ограничить выпадающие элементы для показа. Но нет такого правильного способа показать количество опций maximumSuggestions, но трюк, который вы можете применить, – это получить высоту одной из строк и умножить ее (количество строк для отображения) и использовать setDropDownHeight() чтобы установить ее высоту ,

Существует метод setDropDownHeight класса AutoCompleteTextView . Вы можете видеть их и использовать.

Если вы сбиты с толку или не уверены в высоте предложений предложений, вы можете настроить это. Посмотрите, как установить пользовательскую высоту.

Попробуйте этот атрибут для активности в AndroidManifest.xml

 android:windowSoftInputMode="stateHidden|adjustPan" 

Он должен выглядеть примерно так.

  <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" /> 

Атрибут, с которым вы хотите играть, – это windowSoftInputMode попробовать разные значения, так как вам может потребоваться другой вывод через определенное время.

 adjustPan 

Главное окно мероприятия не изменяется, чтобы освободить место для мягкой клавиатуры. Скорее, содержимое окна автоматически разворачивается так, что текущая фокусировка никогда не закрывается клавиатурой, и пользователи всегда могут видеть, что они печатают. Это, как правило, менее желательно, чем изменение размера, поскольку пользователю может понадобиться закрыть мягкую клавиатуру, чтобы получить доступ к скрытым частям окна и взаимодействовать с ними.

 adjustResize 

Главное окно операции всегда изменяется, чтобы освободить место для мягкой клавиатуры на экране.

 stateHidden 

Мягкая клавиатура скрыта, когда пользователь выбирает действие, то есть когда пользователь позитивно переходит вперед к активности, а не обращается к нему из-за оставления другого действия.

Вы можете найти более подробную информацию о документации элемента действия

Обновить

Я написал что-то, что может вам помочь, макет доступен на макете

 <?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" /> 

Код находится в коде

  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 

До

 After 

[ после]

Поведение клавиатуры – это прокрутка вида, чтобы закрыть нижнюю часть области текста.

Наконец, мы должны использовать атрибут android:gravity="bottom" для решения проблемы пользовательского интерфейса, но нам нужно рассмотреть UX, например: Hint.

Итак, решение заключается в прослушивании onClick() и для проблемы с клавиатурой, мы должны использовать динамический метод для определения силы тяжести.