6
5

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.

いまさらAndroid端末の物理キーボード対応を試みた備忘録

Last updated at Posted at 2017-10-06

2017年にもなっていまさらAndroid端末の物理キーボード対応をしてみたので調査内容をメモしておく。

全体的にめっちゃ書きかけ。あとでいろいろ追記するかも。

経緯

拙作のついっとぺーん1はそもそも物理キーボード対応をしていませんでした。
そんなアプリでガラホ(SHF31)での10キー操作が全然できないのを改善するのがそもそもの目的でしたが、ガラホはスクリーンのタップ操作ができない2 など開発対象として茨の道すぎるので、まずはNexus5XにBluetoothキーボードを接続し、物理キーボード対応から行うことにしました。

対応すべきこと

物理キーボード対応のためにやったことは概ね下記の通り。

  • タッチモード・非タッチモードを理解する
    • 端末のホーム等で、物理キーボードのEnterからアプリを起動するとアプリ起動時点でタッチモード、アイコンタップで起動すると非タッチモード
  • フォーカスの概念を知る
  • フォーカスの設定方法を理解する
    • focusable とか clickable とか
    • requestFocusとか<requestFocus>とか
    • android:nextFocusDown とか
  • フォーカスとデザイン
    • <selector><item android:state_pressed="true"> を設定する
  • ViewonClickListener などリスナーを付けるとフォーカスが自動設定されるのを注意する
  • ListView でEnterキー押下イベントを取れないときは descendantFocusability が必要かも
  • 初期フォーカスとタッチモード
    • <requestFocus> タグを付けたViewが初期フォーカスになるらしい
    • onGlobalFocusChanged でタッチモードになったタイミングを捕捉し、初期フォーカスを設定するという裏技もある。非タッチモードからタッチモードになったときにフォーカスがどっか行ってしまうのを抑制するという意味で。ToolBarが悪さしてるっぽいんだけど調査中。

descendantFocusability について

ListViewの項目のXMLにてRootViewに対して android:descendantFocusability="blocksDescendants"属性を付けるといい感じにイベントを取れるようになる的なやつ。

リンク集


  1. Twitterのついっとぺーん(ツイッター) - Google Play の Android アプリ

  2. タッチクルーザーEXという仮想カーソルはあるけど「クリック」ができないので実質使えない

6
5
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
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?