3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ChromebookのAndroidアプリでエンターキーで改行できない件の対策

Posted at

はじめに

半年ほど前から、Chromebookの一部機種でAndroidサブシステムがAndroid 9ベースの物に入れ替わり始めました。この上で動作するAndroidアプリでEditTextの動作不良が出るようになりました。具体的には、マルチラインのEditTextでEnterキーを押した時に改行コードが入力されない、という問題です。Shift+Enterは何故か動きます。同じアプリを本物のAndroid+Bluetoothキーボードで動作させた場合は、問題なく動作します。しばらく原因不明で手が出せなかったのですが、ようやく原因が分かりました。

EditTextにEditorActionListenerを設定した場合に、actionId=actionNextでリスナが呼ばれることが分かりました。

        edittext.setOnEditorActionListener { v, actionId, event ->
            Log.d("====>","$actionId $event")    // actionId=5が出力される
            true
        }

EditTextを特に普通にレイアウトやコードで作成した場合、imeOptionsにはactionUnspecified(=0)が設定されます。本物のAndroidだと、これが副作用を起こすことはなかったのですが、ChromebookではactionNextを指定した物として振る舞うようなのです。

このために、setOnEditorActionListenerのデフォルトの挙動(falseを返す)とした場合に、近隣のフォーカスを持つボタンがクリックされるという挙動を引き起こしていました。

ワークアラウンド

マルチラインのEditTextでEnterキーによる改行が必要な場合は、以下の設定を行います。

    <EditText
        ...
        android:imeOptions="actionNone"
        />

imeOptionsに明示的にactionNoneを指定することで、Enterキーは本来の挙動(改行する)として振る舞うようになります。

めでたしめでたし。って全然めでたくねーよ。

以上です。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?