2013年2月20日水曜日

[Swipestarter]メニューボタンが無い端末で変な感じに


メールで知らせていただきましたので、こちらでも報告させていただきます。

メニューボタンが無い端末(HTC J butterfly)にてフォルダ等を起動した際にドックの下あたりに「:」←こんな感じのソフトウェアキーのメニューボタンが表示されます。

これは何かというと、メニューボタンが無いので4.X系に最適化されていないアプリを起動したときに、メニューを押せるようにOSが判断して表示しているっぽいです。
4.X系に最適化って何?っていうのは、アクションバー対応です。

4.X系ではボタン構成が従来の「メニュー」「ホーム」「戻る」「検索」から「アプリ履歴」「ホーム」「戻る」になりました。
メニューボタンが消されちゃいました。そのかわり、アクションバーっていうのをアプリ内に組み込んでそこからメニューを起動しろと。

まぁ、メニューなんてアプリの中で完結できるはずだから、わざわざハードに実装する必要もないんだろうけど。
この方向性は間違っていないとは思うんですけど、それを強制しちゃうところがAndroidのニクいところ。

Swipestarter(に限らず、僕のアプリ全般)では、Android2.1くらいから使えるように作っています。
なので、アクションバーも実装していないです。

このような実装のアプリを起動した際には、メニューキーの無い端末の場合、OSが勝手に判断してメニューを表示してくれます。
たとえばGalaxyNexusのようなソフトウェアキーの場合、端っこにちょこんと「:」←こんな感じのメニューが追加されます。
そして、HTC J butterflyのようなハードキーの場合、ドックの下あたりに「:」←こんな感じのソフトウェアキーのメニューボタンが表示されます。

超かっこ悪いですね。
今のところハードキーかつメニューキーの無い端末は、まだそんなに出回っていない(と思っている)ので、この現象にぶち当たる人は少ないかもしれません。

で、結論を言うと、これは治せます。
アプリのターゲットSDKバージョンを4.X系にしちゃえばいいです。
そうすると、OSがアクションバーを実装してあるとみなして「:」←これが出なくなります。

対応自体は簡単そうですが、ターゲットを変更したことによる動作検証をしなければいけないので、まとまった時間が作れたら対応します。
あ、あとメニューがある画面(ドロワーだけかな)にメニューを表示できるボタンを追加しないとダメですね。
どんどんたまっていく。。。ごめんなさい。



なぜ対応を後回しにしたかというと、HTC J butterflyにはハードキーの設定があるらしく、そこでメニューを割り当てるとOSがメニューボタンありと判断して「:」これが出なくなるとの報告を貰ったからです。
という事で、いったん端末の設定側で逃げてください。
よろしくお願いします。

0 件のコメント:

コメントを投稿