Action Bar Compat読んでみた

9,068 views
8,959 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
9,068
On SlideShare
0
From Embeds
0
Number of Embeds
4,265
Actions
Shares
0
Downloads
19
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

×