見出し画像

ソフトキーボードを閉じると NestedScrollView が連動して余計にスクロールされてしまう|Android Java

メモ帳・日記帳などのアプリは、「タイトル」と「本文」を入力構成とした画面レイアウトが基本の形になると思います。それはメモ帳アプリ『CountablePad』でも同様です。

デザイン

例えば、アプリの見た目は以下のようなものです。

画像1

CountablePad メモ作成画面

レイアウト

レイアウトファイルでは以下のような構成です。

<CoordinatorLayout>
    <AppBarLayout>
        <Toolbar>
    <NestedScrollView>
        <ConstraintLayout>
            <EditText>
            <EditText>

これは Android の基本に則ったとても単純な構成ですが、だからこそ困ったことに、表題に記載した通りの不具合が発生してしまいます。

どうやら、NestedScrollViewEditText を含めることを Android は想定していないようです。

不具合

では、どのような不具合が発生するかを説明します。

今、以下のように、本文を入力していて、文末にカーソルが表示されている状態だとします。ソフトキーボードが表示されている状態です。

画像2

CountablePad メモ入力中

ここで、ソフトキーボードを閉じます。

すると、それだけで不具合が発生した状態になります。メモの文末にカーソルが表示されているはずなのに、ソフトキーボードの非表示に連動して、画面上部まで勝手にスクロールが上がってしまいました。カーソルが画面外に隠れてしまっています。

画像3

CountablePad スクロール不具合発生(Ver.8.6.6 以下)

期待する状態(不具合が発生しない状態)は、ソフトキーボードを閉じても、スクロールが勝手に動かずに、文末のカーソルが画面内に表示されている状態です。

以下は不具合を修正した場合です。

画像4

CountablePad スクロール不具合修正(Ver.8.6.7)

解析と修正

不具合を解析してみると、NestedScrollView に割と単純な問題点が見つかりました。

ここから先は

3,914字
この記事のみ ¥ 980

この記事が参加している募集

習慣にしていること

この記事が気に入ったらサポートをしてみませんか?