2017年1月10日火曜日

Androidでタッチイベントが取得できないだと!/ 解決編

Androidで初回のタッチが取得できない件が解決した。

どうやら、ナビゲーションバーの非表示が絡んでいたらしい。
ナビゲーションバーの非表示については、Activityの onCreate() で以下をするのが一般的のようだ。
View view = window.getDecorView();
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | c);

これを、GLSurfaceView を作成して、setContentView をやったあとに呼ぶのか、やる前に呼ぶのか、説明しているブログでも統一されていない。

今回のアプリの実機テストは、F-10Dと、nuuX4で行っているのだが、どちらの機種も、ナビゲーションバーは物理的に表示されていて、OFFにできない。

※上記プログラムの青色部分は、APIレベル的にF-10Dでは対応してないので注意

だが、ナビゲーションバーの表示を切り替えられる、MOVERIO BT-300で試したところ、原因が分かった。

この命令は、あくまで、ナビゲーションバーを“隠す”ものなのだ。
で、隠れた状態で、タッチすると、ナビゲーションバーが表示される。

このナビゲーションバーの表示に、1タッチ取られているから、初回のタッチは検出できず、ナビゲーションバーは一度表示されると、二度と隠れないので、そのままアプリのActivityにタッチイベントが通知される、という動作のようだ。

むむ…。

元々、ナビゲーションバーの非表示を追加したのは、MOVERIO対策。
ディスプレイに有機ELを使用しているため、長時間同じものを表示すると焼きつく、と説明があるからだ。
ナビゲーションバーなんて、同じものしか表示しないジャン!

だが、実機テストは、今まで通り、F-10Dで行っていたので、初回タッチ問題が発生してしまったわけだ。

実機テストをnuuX4に変更し、ターゲットをレベル19(Android4.4)に設定して、

View.SYSTEM_UI_FLAG_IMMERSIVE
を追加したところ、ナビゲーションバーも表示されなくなり、かつ、1タッチ目から取得できるようになった。

めでたしめでたし。

MOVERIOの技術資料を見ると、この点に触れていて、BT-300より前の機種では、専用のAPIでフルスクリーンにしていたが、BT-300では、Android標準の、上記方法でフルスクリーン化ができるようになったそうな。

もう、実機テストにすら、使えなくなってきたのか >F-10D

しまった、実機テスト用に、年末年始の安いタブレットを買っておけば良かった…!


0 件のコメント:

コメントを投稿