Más contenido relacionado
Similar a Action Bar Compat読んでみた (20)
Más de Yukiya Nakagawa (18)
Action Bar Compat読んでみた
- 2. Agenda
• Introduction
• ActionBarCompatについて
• 読解:ActionBarCompat
2011/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
- 13. ActionBarCompatとは
• Android公式サンプルの一つ
http://developer.android.com/resources/samples/ActionBarCompat/i
ndex.html
• 何故かコンパチ抜きでActionBar実装
してる
2011/12/14
- 14. つまり
• ActionBarCompatの中で何が起きてい
るのか分かれば、コンパチと組み合
わせて、アプリの単一apk化も十分に
可能!かも!
どうせ後で
コンパチに
組み込まれるし
2011/12/14
- 15. よむ。
読解 ACTIONBARCOMPAT
2011/12/14
- 16. 読む順
• AndroidManifest.xml
– res/drawableとvalues*も逐次
• res/layout*
• res/menu
• res/drawable-*
• src
2011/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しか入ってないFrameLayout
2011/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.png
2011/12/14
- 23. src
• ActionBarActivity.java
• ActionBarHelper.java
• ActionBarHelperBase.java
• ActionBarHelperICS.java
• MainActivity.java
• SimpleMenu.java
• SimpleMenuItem.java
2011/12/14
- 24. src:継承関係
ActionBarHelper
ActionBarActivity
extends extends
extends
MainActivity ActionBarHelperBase ActionBarHelperHoneycomb
extends
Menu MenuItem
implements implements ActionBarHelperICS
SimpleMenu SimpleMenuItem
色の意味:Abstract, Interface, Normal
2011/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