2011年12月2日金曜日

Android4.0で変わったいろいろの確認、およびGalaxy Nexus予約したよ話

'Droid For Earth' photo (c) 2011, victoria white2010 - license: http://creativecommons.org/licenses/by/2.0/

(11/12/05 間違った記述とか足したい記述とか合った場合にごりごり追記しています。増え過ぎたらそのうち別エントリーとして清書するかも。)

そんでは前回の2.2→Honeycombに続き、Android4.0(ice cream sandwich)を見てこうと思います。ごく大雑把に。

とりあえず公式のバージョンノートとそれを和訳してくださってる記事を真面目に読むと以下は読まなくても大丈夫です。

Galaxy Nexusを店頭でちょっと触った印象と実用上のアレ

まだ店頭でちょっと触っただけで手元に来てないですが、クソでっけーです。4.65インチですもんね。たぶん4.0のネイティブ解像度である720pが出せるディスプレイとしては相当小さい方なんでしょうけど、絶対的にでっけーです。まあ土曜日に来る予定なのでしばらく使ってみて慣れるかどうか様子見ですね。3.7インチ以下のほうが幸せになれると個人的には思うんだけど、最近のハイスペックなAndroid端末はどれもこれもでっかいですなぁ…。

ボタン変わったね―とかはあとでやるので割愛しますけど、それ以外でつまづきそうなのはMacからのファイル転送でして、4.0ではどうもUSBマスストレージ接続できない(MTPかPTPが利用できる)ようです。MacはMTPでやりとりとかデフォではできないので、Googleが配布しているAndroid File Transferてのを使うとよいらしいです。

基本のUIまわりについて

とりあえずあったらしいUIの用語確認から。

Usage all lg

Status Bar(一番上のおなじみの)、Action Bar(ステータスバーの下の3.0からの)、Navigation Bar(Back / Home / Recent Appsのソフトウェアボタンが表示されてるところ)が表示されます。

あとはSplit Action Bar(Navigation Barの上くらいに表示されるアクションバー)とかもたまに出ます。あとAction Barの左に表示されるアプリアイコンはHome Buttonて呼ぶらしいです、その名前どうなんだって感じするけど。

このNavigation Barが表示されている領域ですが、端末がタブレットである場合はsystem barというのが出ます。system barはHoneycombで下に出てたやつと同じもので、ボタンの表示だけじゃなく時計とかなんとかStatus Bar的な表示もちょろちょろしてるところがNavigation Barと違います。

じゃあPhoneなのかTabletなのかの判定はどうやってるんかというと、短辺が600dp(densityが160なら600px)以下だとPhoneとしてるということらしいです。ソフトウェア的に判定する方法はみんなすきすきstackoverflowのDeveloping an universal android application (phone and tablet)なぞが参考になります(スクリーンレイアウトてパラメータとってきてSCREENLAYOUT_SIZE_LARGE以上だったらタブレットだコリャという感じ)。

あと、Menuボタンが引退した件の4.0の話ですが、基本的にはHoneycombと同じで今後はAction Barをよろしくという話です。あと2.x以下向けのオプションメニューを持つアプリを実行した場合、HoneycombではRecent Appsボタンの横にMenuボタンが帰ってくるんぬという方法が取られていましたが、4.0ではAction Bar上にMenuっぽいアイテムが出てくれてダサくないも以下のように同じくRecent Appsボタンの横に出るようです(実機確認したらウソだったので11/12/03修正)。

ただメニューボタンのonKeyDownをフックしてなんかしてからメニュー出すべとかやってた場合は救われないです。

せっかく画面あるのでついでに4.0でははどうするとフルスクリーン出来るんざんしょかという話もしちゃおうかと思います。ステータスバーは多分いつものFLAG_FULLSCREENでよろしくなんですが、下側が曲者らしいです。ナビゲーションバーはsetSystemUIvisibilityでHideにしてやると隠せます(ただしユーザーがなんか触ると表示状態になる)が、system barは隠せないらしいらしいです。low profileを渡してボタンのアイコンを薄暗くはできるけど、機能と表示領域は維持されます。

(11/12/05 フルスクリーンの方法について以下に追記)

まずは書き忘れたなーと思ったAction Barの隠し方。Action Barを隠すは簡単で、静的にやる場合はManifestでActivityにandroid:theme="@android:style/Theme.Holo.NoActionBar"を設定、動的にやる場合はActivity.getActionBar().hide()を実行すればOKです。

あとstatus barの隠し方についてFLAG_FULLSCREENでいいんじゃねと書いておりましたが、非推奨になったりとかはしてないのでたぶんこれも機能はするんですが、恐らく4.0においては3.0で追加のsetSystemUiVisibility()を用いる方法が推奨かと思われた事を追記します。パラメータは4.0で新しく追加されたSYSTEM_UI_FLAG_LOW_PROFILE(status barは隠れる、Navigation Barは薄暗くなる)又はSYSTEM_UI_FLAG_HIDE_NAVIGATION(status barもNavigation Barも隠れる)のいずれかを使うとよいです。

もろもろ新機能

  • Android Beam(NDEF Push with NFC) : NFC経由で端末間通信できる。あまりたくさんのデータは送れない。
  • Wi-Fi Direct : アクセスポイントを経由せずにアドホック通信出来ちゃう。discoverPeers っての叩いて接続先候補探してきて接続するらしい。探される側で準備や設定とかねえのかな。
  • GridLayout : グリッドを切って、そのグリッドのどこに置いてねって感じでViewが配置できるレイアウト。
  • Social API : ユーザーのプロファイルがPermission切ると読み書きできたりとか、Invite Intentというコンタクト追加リクエスト用アクションとか。
  • Hoverイベント : カーソルやスタイラス用に、UI上にカーソルが来たぜというonHoverイベントが用意された。
  • ActionProvider : 今までswitchでメニュー番号判定してーとかビチョビチョやってたのがもう少しきれいに書けるようになる、のかな。
  • その他、カレンダーのデータの読み書き強化、メディア再生や操作関連の強化、カメラ周りの機能追加、Accessibilityの改善用API(テキスト読み上げ等)、グラフィックがどうたらとかエンタープライズ向けがこうたら等。
  • あとデジタイザーペンの筆圧とか傾きとかをAPIで拾えるようになったらしいので、なんかこうAndroidタブレットで液タブ的なのが廉価で出てくるといいですね。

んで、こいつらをすぐ使えるのかなと少し考える

ActionBarとかFragmentsとかなんとかびしばし使えば、シャレオツで複数プラットフォーム対応なUI作れそうではあるよねというのが見える一方で、今はまだ2.x端末がシェア大きいので、minSDKを4.0にしちゃうのは厳しいように思われます。

一方で提供されている互換性確保手段(前回紹介したHoneycombから追加されたcompatibility package)が、現バージョンのv4時点でFragmentsとアクセシビリティ系APIと他少々しかカバーしていない(せめてAction Barはやってほしいよね)といういまいちな子なので、これが充実してこないと明確に大画面タブレットがターゲットとかじゃない限りまだ仕事では3.0+のアプリ書くチャンスあんまないんじゃないかという気がします。まあ4.0ならではのUXを実現したアプリを先行して出しちゃうのも楽しそうではありますよね。

(11/12/05)たぶんGoogle先生的にはきっと「一般開発者にはどうしようもないFragmentsは実装しといたので他は頑張ってね」という事なんじゃないかって気がしてきたので、オプションメニューは一切使わず、Action bar や split action bar、Action barのフローティングメニューとかを自力で実装するなりサードパーティの適当なライブラリ使って実装するなりしてで互換性を確保すればいいのかもしれません。なんか大変だしAction Barのデザインがアプリごとにまちまちになりそうなのでやっぱ本来はcompatibility packageでひと通り提供されるのがいいと思うんですけど。

その他4.0とあんま関係ないAndroidメモ

 

 

0 件のコメント:

コメントを投稿