Help us understand the problem. What is going on with this article?

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

はじめに

半年ほど前から、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キーは本来の挙動(改行する)として振る舞うようになります。

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

以上です。

jiro-aqua
アドエス小物日記のJiroです。Androidとか、Kotlinとか、RxJavaとか、呟きます。
http://pandora.sblo.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした