【Android】キーボードが出現したら画面をスクロールする
こんばんは。
Androidで、テキストフォームとかに入力しようとすると、キーボードが出てしまい、下にあるボタンなどが隠れてしまう場合があります。
そんなときはキーボードが出ている状態で画面をスクロールできると良いですよね。
そこで、それを実装したいと思います。
色々ググると、AndroidManifestの対象Activityタグの中に「android:windowSoftInputMode="adjustPan"」を指定すると出来ると書いてあります。
しかし、なぜか自分は出来ず・・・
なんで出来ないのかは未だに不明です。
そこで結構ハマッてしまったのですが、やっと解決方法を見つけました。
まずレイアウトファイルで、全体をスクロールビューに入れます。
こんな感じです。
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:layout_weight="1"> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" tools:context=".MainActivity" > <EditText /> . . . </RelativeLayout> </ScrollView>
重要なのは、ScrollViewで android:layout_weight="1" としていることです。
そして、次にManifestの対象Activityタグの中に以下を記述します。
android:windowSoftInputMode="adjustResize"
adjustResize は、android:layout_weight="1"のものをリサイズするようです。
これでスクロールが出来るようになると思います。
すごく悩んでいたのですが、とりあえずこれで出来たので良しとします。
以上です。
それでは。
2013/11/21 追記
どうしてもScrollViewを入れられない(ScrollViewが入れ子になってしまうような)レイアウトファイルで同じような状況が発生してしまいました。
この場合は、上記の"adjustResize"を使えないので困っていた所、"adjustPan"をAndroidManifestの対象Activityに指定したら意図していた動作をしてくれました。
ただし、この場合はスクロールできるようになるのではなく、フォーカスがあたっているEditText等を基準に、キーボードの上にView全体をスクロールしてくれるというものですが。
なぜ前の環境で動かなかったのかは不明ですが、ScrollViewを入れられない場合は、"adjustPan"で対応していくのが良さそうです。