残念ながら、現在のSDKでは、ソフトキーボードが表示されたり消えたりしたときのビューの動作に関しては、システムに少し依存しています。探している動作を実現する最良の方法は、ウィンドウにデフォルトの入力モードを残し、ビューにスクロール可能な要素が1つあることを確認することです。この要素は、キーボードが非表示(スクロールビューよりも小さいコンテンツ)のときにスクロールする必要はありませんが、キーボードが表示されると、スクロール可能なビューのサイズが折りたたまれ、他のすべてがそのままになります。
これが例です。これがあなたの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>
これを基本的なアクティビティのルートレイアウトとして試してみてください。Androidは、フォーカスされた入力要素を表示するのに十分なだけビューを上にスライドするのLinearLayout
ではなく、ビューポートのサイズを変更しているため、キーボードで全体が上下にスライドすることがわかります。ScrollView
今見ています)。