ソフトキーボードを閉じると NestedScrollView が連動して余計にスクロールされてしまう|Android Java
メモ帳・日記帳などのアプリは、「タイトル」と「本文」を入力構成とした画面レイアウトが基本の形になると思います。それはメモ帳アプリ『CountablePad』でも同様です。
デザイン
例えば、アプリの見た目は以下のようなものです。
レイアウト
レイアウトファイルでは以下のような構成です。
<CoordinatorLayout>
<AppBarLayout>
<Toolbar>
<NestedScrollView>
<ConstraintLayout>
<EditText>
<EditText>
これは Android の基本に則ったとても単純な構成ですが、だからこそ困ったことに、表題に記載した通りの不具合が発生してしまいます。
どうやら、NestedScrollView に EditText を含めることを Android は想定していないようです。
不具合
では、どのような不具合が発生するかを説明します。
今、以下のように、本文を入力していて、文末にカーソルが表示されている状態だとします。ソフトキーボードが表示されている状態です。
ここで、ソフトキーボードを閉じます。
すると、それだけで不具合が発生した状態になります。メモの文末にカーソルが表示されているはずなのに、ソフトキーボードの非表示に連動して、画面上部まで勝手にスクロールが上がってしまいました。カーソルが画面外に隠れてしまっています。
CountablePad スクロール不具合発生(Ver.8.6.6 以下)
期待する状態(不具合が発生しない状態)は、ソフトキーボードを閉じても、スクロールが勝手に動かずに、文末のカーソルが画面内に表示されている状態です。
以下は不具合を修正した場合です。
CountablePad スクロール不具合修正(Ver.8.6.7)
解析と修正
不具合を解析してみると、NestedScrollView に割と単純な問題点が見つかりました。
この記事が参加している募集
この記事が気に入ったらチップで応援してみませんか?