Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Action Bar Compat読んでみた

9,158 views

Published on

  • Be the first to comment

Action Bar Compat読んでみた

  1. 1. ActionBarCompat読んでみた 2011/12/12 中川2011/12/14
  2. 2. Agenda • Introduction • ActionBarCompatについて • 読解:ActionBarCompat2011/12/14
  3. 3. どうしてこうなった INTRODUCTION2011/12/14
  4. 4. 現状の課題 • Android版アグリノート – スマートフォン版 – タブレット版 • できれば1つのapkで済ませる • 2012年の春〜夏にかけて訪れる Android 4.x Icecream Sandwitch(ICS) の時代への親和性を確保する2011/12/14
  5. 5. 解決への基本方針 • ICS対応に主眼を置く – 理由1:アグリノートリリース直後の 2012年春モデルはICSだらけになると予 想されるため – 理由2:ICSはスマートフォンでもタブ レットでも動作するため • タブレット対応が次点 – 理由:ICSと共通のAPIが多いので楽2011/12/14
  6. 6. 基本方針の問題点 1/2 • Android 2.3.x以下のスマートフォン への対応 Platform Codename API Level Distribution Android 1.5 Cupcake 3 0.8 % Android 1.6 Donut 4 1.3 % Android 2.1 Eclair 7 9.6 % Android 2.2 Froyo 8 35.3 % Android 2.3 - Gingerbread 9 0.5 % Android 2.3.2 Android 2.3.3 - 10 50.1 % Android 2.3.7 Android 3.0 Honeycomb 11 0.1 % Android 3.1 12 1.1 % Android 3.2 13 1.2 % Platform Versions | Android Developers (2012/12/1現在)2011/12/14
  7. 7. 基本方針の問題点 2/2 • 全世界でアクティベートされた Android端末のうち97.6%がAndroid 2.3.x以下。 • 2011〜2012年冬春モデルが最後の 2.3.xになったとしても、2年縛りが 切れるのは2014年春 中長期に渡るサポートが必要2011/12/14
  8. 8. 解決策 • Support Package – http://developer.android.com/sdk/compatibility-library.html – 旧称:Compatibility Package – 通称:コンパチ – Android 1.6以上の端末にHoneycomb以 降との互換APIを提供する – ただし、一部のAPIはサポートされてい ない2011/12/14
  9. 9. コンパチの問題点 ActionBarがサポートされていない2011/12/14
  10. 10. ActionBarだいじ • Honeycomb以降のアプリでは追加機 能へのアクセスにおけるActionBarの 存在は偉大 • 実は2.3.xまでにあったOptionsMenu をちょっとゴニョればActionBarに自 動で移ってくれる – が、どうせICSではActionBarに載せるこ とになる2011/12/14
  11. 11. 2.x系でも ActionBar 使いたいなあ2011/12/14
  12. 12. いいものみつけたかも ACTIONBARCOMPATについて2011/12/14
  13. 13. ActionBarCompatとは • Android公式サンプルの一つ http://developer.android.com/resources/samples/ActionBarCompat/i ndex.html • 何故かコンパチ抜きでActionBar実装 してる2011/12/14
  14. 14. つまり • ActionBarCompatの中で何が起きてい るのか分かれば、コンパチと組み合 わせて、アプリの単一apk化も十分に 可能!かも! どうせ後で コンパチに 組み込まれるし2011/12/14
  15. 15. よむ。 読解 ACTIONBARCOMPAT2011/12/14
  16. 16. 読む順 • AndroidManifest.xml – res/drawableとvalues*も逐次 • res/layout* • res/menu • res/drawable-* • src2011/12/14
  17. 17. AndroidManifest.xml • ほぼ何の変哲もない、1つのActivity で構成されるアプリのマニフェスト • 見所① <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="14" /> 意訳: 「本当はICS向けに作ってあるけど、 Android 1.5でも動かんわけでもないよ」2011/12/14
  18. 18. AndroidManifest.xml • 見所② android:theme=“@style/AppTheme” ※標準テーマ(Theme.Holo.Light)から オーバーライドしてテーマ自作してます res/drawable/*.xmlとres/values/*.xmlは、概ね res/values*/style.xmlを作るために存在している。2011/12/14
  19. 19. res/layout* • res/layout – actionbar_compat.xml 空のLinearLayout(horizontal) – main.xml Buttonしか入ってないFrameLayout • res/layout-v11 – actionbar_indeterminate_progress.xml ProgressBarしか入ってないFrameLayout2011/12/14
  20. 20. res/menu • main.xml – @+id/menu_refresh • android:orderInCategory=“1” • android:showAsAction=“always” – @+id/menu_search • android:orderInCategory=“0” • android:showAsAction=“always” – @+id/menu_share • android:orderInCategory=“1” • android:showAsAction=“never”2011/12/14
  21. 21. 各パラメータ • android:orderInCategory – http://developer.android.com/guide/topics/resources/menu-resource.html – ActionBar/メニュー内での表示順序 • android:showAsAction – ActionBarでの扱い • never:初期表示される範囲に出てこない • always: 常に表に表示 • ifRoom: もし空きがあれば表に表示 • withText: android:titleも表示2011/12/14
  22. 22. res/drawable-* • 各サイズ共通 – actionbar_shadow.9.png – ic_action_refresh.png – ic_action_search.png なにこれ・・・ – ic_action_share.png – ic_home.png – ic_launcher.png • スマホサイズ(hdpi,mdpi)限定 – ic_menu_share.png2011/12/14
  23. 23. src • ActionBarActivity.java • ActionBarHelper.java • ActionBarHelperBase.java • ActionBarHelperICS.java • MainActivity.java • SimpleMenu.java • SimpleMenuItem.java2011/12/14
  24. 24. src:継承関係 ActionBarHelper ActionBarActivity extends extends extends MainActivity ActionBarHelperBase ActionBarHelperHoneycomb extends Menu MenuItem implements implements ActionBarHelperICS SimpleMenu SimpleMenuItem 色の意味:Abstract, Interface, Normal2011/12/14
  25. 25. SimpleMenu/Item • 本家Menu/Itemの縮小版実装 • 「完全版はAOSPの com.android.internal.view.menuの MenuBuilderとMenuItemImplを見に 行ってね」とか書いてあった。 • Android 1.6系にないメソッドを潰し にかかっている感じ。2011/12/14
  26. 26. ActionBarActivity • extends Activity • Abstractクラス • Activityクラスのメソッドをひたすら オーバーライドしてActionBarHelper へ処理を委譲している • OnCreateOptionsMenuは ActionBarHelperとsuperを両方実行し ている気がする2011/12/14
  27. 27. MainActivity • extends ActionBarActivity • 何の変哲もないActivity • ボタンを押すとタイトルが変わる • メニューを押すと対応するToastが出 てくる • ただし2.x lowerには android.R.id.homeなんてIDはない。2011/12/14
  28. 28. ActionBarHelper • Abstractクラス • 実装されている機能はバージョンご とにActionBarHelper○○を返すFactory メソッドだけ • あとはMainActivityのライフサイクル から呼び出すための空メソッド2011/12/14
  29. 29. ActionBarHelperBase • extends ActionBarHelper • ActionBarを自前で生成するという荒 行にチャレンジしているクラス • actionBarという名のViewGroup • inflateメソッドの独自実装とか泣ける – XmlResourceParserとか初めて見た • レイアウトの大半はstyles.xmlで済ん でいる2011/12/14
  30. 30. ActionBarHelperHoneycomb • 本来のライフサイクル系メソッドの 機能がそのまま動くように丸投げ • setRefreshActionItemSateだけ細かい 実装が入っているが、これは本来 Fragment#onCreateViewや Activity#onCreateなどで実装するよう な部分2011/12/14
  31. 31. ActionBarHelperICS • ほぼActionBarHelperHoneycombに丸 投げ • ActionBar周りのContext渡しメソッド getActionBarThemedContextだけ、 ActionBar#getThemedContext (API14)を利用している2011/12/14

×