К сожалению, в текущем SDK мы немного на милости системы, когда речь заходит о том, как ведет себя представление, когда программная клавиатура появляется и исчезает.Лучший способ добиться нужного поведения - оставить в окне режим ввода по умолчанию и убедиться, что в вашем представлении есть один прокручиваемый элемент.Имейте в виду, что этот элемент не нужно прокручивать, когда клавиатура скрыта (содержимое меньше, чем представление прокрутки), но когда раскроется клавиатура, он уменьшит размер прокручиваемого представления и оставит все остальное в покое.
Вот пример.Допустим, это ваш файл res / layout / main.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/control"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical">
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="A Button"/>
</LinearLayout>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@id/control">
</ScrollView>
</RelativeLayout>
Попробуйте использовать его в качестве корневого макета базового упражнения, и вы увидите, что весь LinearLayout
скользит вверх и вниз с помощью клавиатуры,потому что Android изменяет размер области просмотра ScrollView
вместо того, чтобы сдвинуть вид вверх достаточно, чтобы показать сфокусированный элемент ввода (который вы видите сейчас).