Your SlideShare is downloading. ×
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Action Bar Compat読んでみた
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Action Bar Compat読んでみた

8,733

Published on

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

No Downloads
Views
Total Views
8,733
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
18
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×