SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
ActionBarCompat読んでみた

             2011/12/12 中川




2011/12/14
Agenda
             • Introduction
             • ActionBarCompatについて
             • 読解:ActionBarCompat




2011/12/14
どうしてこうなった

   INTRODUCTION


2011/12/14
現状の課題
             • Android版アグリノート
               – スマートフォン版
               – タブレット版
             • できれば1つのapkで済ませる
             • 2012年の春〜夏にかけて訪れる
               Android 4.x Icecream Sandwitch(ICS)
               の時代への親和性を確保する


2011/12/14
解決への基本方針
             • ICS対応に主眼を置く
              – 理由1:アグリノートリリース直後の
                2012年春モデルはICSだらけになると予
                想されるため
              – 理由2:ICSはスマートフォンでもタブ
                レットでも動作するため
             • タブレット対応が次点
              – 理由:ICSと共通のAPIが多いので楽


2011/12/14
基本方針の問題点 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
基本方針の問題点 2/2
             • 全世界でアクティベートされた
               Android端末のうち97.6%がAndroid
               2.3.x以下。
             • 2011〜2012年冬春モデルが最後の
               2.3.xになったとしても、2年縛りが
               切れるのは2014年春

                中長期に渡るサポートが必要


2011/12/14
解決策
             • Support Package
               – http://developer.android.com/sdk/compatibility-library.html

               – 旧称:Compatibility Package
               – 通称:コンパチ
               – Android 1.6以上の端末にHoneycomb以
                 降との互換APIを提供する
               – ただし、一部のAPIはサポートされてい
                 ない


2011/12/14
コンパチの問題点




             ActionBarがサポートされていない




2011/12/14
ActionBarだいじ
             • Honeycomb以降のアプリでは追加機
               能へのアクセスにおけるActionBarの
               存在は偉大
             • 実は2.3.xまでにあったOptionsMenu
               をちょっとゴニョればActionBarに自
               動で移ってくれる
              – が、どうせICSではActionBarに載せるこ
                とになる

2011/12/14
2.x系でも
              ActionBar
             使いたいなあ




2011/12/14
いいものみつけたかも

   ACTIONBARCOMPATについて


2011/12/14
ActionBarCompatとは
             • Android公式サンプルの一つ
              http://developer.android.com/resources/samples/ActionBarCompat/i
              ndex.html

             • 何故かコンパチ抜きでActionBar実装
               してる




2011/12/14
つまり
             • ActionBarCompatの中で何が起きてい
               るのか分かれば、コンパチと組み合
               わせて、アプリの単一apk化も十分に
               可能!かも!

                          どうせ後で
                          コンパチに
                         組み込まれるし




2011/12/14
よむ。

   読解 ACTIONBARCOMPAT


2011/12/14
読む順
             • AndroidManifest.xml
                 – res/drawableとvalues*も逐次
             •   res/layout*
             •   res/menu
             •   res/drawable-*
             •   src



2011/12/14
AndroidManifest.xml
             • ほぼ何の変哲もない、1つのActivity
               で構成されるアプリのマニフェスト
             • 見所①
              <uses-sdk
                android:minSdkVersion="3"
                android:targetSdkVersion="14" />
                    意訳:
                    「本当はICS向けに作ってあるけど、
                     Android 1.5でも動かんわけでもないよ」


2011/12/14
AndroidManifest.xml
             • 見所②
             android:theme=“@style/AppTheme”
             ※標準テーマ(Theme.Holo.Light)から
              オーバーライドしてテーマ自作してます

                     res/drawable/*.xmlとres/values/*.xmlは、概ね
                     res/values*/style.xmlを作るために存在している。




2011/12/14
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
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
各パラメータ
             • 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
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
src
             •   ActionBarActivity.java
             •   ActionBarHelper.java
             •   ActionBarHelperBase.java
             •   ActionBarHelperICS.java
             •   MainActivity.java
             •   SimpleMenu.java
             •   SimpleMenuItem.java

2011/12/14
src:継承関係
                                                               ActionBarHelper
              ActionBarActivity

                                                   extends                    extends
                       extends

                MainActivity             ActionBarHelperBase         ActionBarHelperHoneycomb




                                                                                  extends
             Menu                  MenuItem

               implements                implements                     ActionBarHelperICS

       SimpleMenu                 SimpleMenuItem


    色の意味:Abstract, Interface, Normal
2011/12/14
SimpleMenu/Item
             • 本家Menu/Itemの縮小版実装
             • 「完全版はAOSPの
               com.android.internal.view.menuの
               MenuBuilderとMenuItemImplを見に
               行ってね」とか書いてあった。
             • Android 1.6系にないメソッドを潰し
               にかかっている感じ。


2011/12/14
ActionBarActivity
             • extends Activity
             • Abstractクラス
             • Activityクラスのメソッドをひたすら
               オーバーライドしてActionBarHelper
               へ処理を委譲している
             • OnCreateOptionsMenuは
               ActionBarHelperとsuperを両方実行し
               ている気がする

2011/12/14
MainActivity
             • extends ActionBarActivity
             • 何の変哲もないActivity
             • ボタンを押すとタイトルが変わる
             • メニューを押すと対応するToastが出
               てくる
             • ただし2.x lowerには
               android.R.id.homeなんてIDはない。


2011/12/14
ActionBarHelper
             • Abstractクラス
             • 実装されている機能はバージョンご
               とにActionBarHelper○○を返すFactory
               メソッドだけ
             • あとはMainActivityのライフサイクル
               から呼び出すための空メソッド



2011/12/14
ActionBarHelperBase
             • extends ActionBarHelper
             • ActionBarを自前で生成するという荒
               行にチャレンジしているクラス
             • actionBarという名のViewGroup
             • inflateメソッドの独自実装とか泣ける
              – XmlResourceParserとか初めて見た
             • レイアウトの大半はstyles.xmlで済ん
               でいる

2011/12/14
ActionBarHelperHoneycomb

             • 本来のライフサイクル系メソッドの
               機能がそのまま動くように丸投げ
             • setRefreshActionItemSateだけ細かい
               実装が入っているが、これは本来
               Fragment#onCreateViewや
               Activity#onCreateなどで実装するよう
               な部分


2011/12/14
ActionBarHelperICS
             • ほぼActionBarHelperHoneycombに丸
               投げ
             • ActionBar周りのContext渡しメソッド
               getActionBarThemedContextだけ、
               ActionBar#getThemedContext
               (API14)を利用している



2011/12/14

Contenu connexe

En vedette

もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4Yukiya Nakagawa
 
Android再入門 〜Eclipseのことは忘れろ〜
Android再入門 〜Eclipseのことは忘れろ〜Android再入門 〜Eclipseのことは忘れろ〜
Android再入門 〜Eclipseのことは忘れろ〜Yukiya Nakagawa
 
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetupAndroid Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetupYukiya Nakagawa
 
僕らのデータ同期プラクティス
僕らのデータ同期プラクティス僕らのデータ同期プラクティス
僕らのデータ同期プラクティスYukiya Nakagawa
 

En vedette (9)

Gudanama Niigata
Gudanama NiigataGudanama Niigata
Gudanama Niigata
 
NFCLAB会津
NFCLAB会津NFCLAB会津
NFCLAB会津
 
UBIC20110707
UBIC20110707UBIC20110707
UBIC20110707
 
もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4もう一度Kotlinの話をしよう #ndsmeetup4
もう一度Kotlinの話をしよう #ndsmeetup4
 
NDS36 Java7&Java8
NDS36 Java7&Java8NDS36 Java7&Java8
NDS36 Java7&Java8
 
Android再入門 〜Eclipseのことは忘れろ〜
Android再入門 〜Eclipseのことは忘れろ〜Android再入門 〜Eclipseのことは忘れろ〜
Android再入門 〜Eclipseのことは忘れろ〜
 
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetupAndroid Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
Android Lintを覚えてベテラン開発者に追いつこう #ndsmeetup
 
僕らのデータ同期プラクティス
僕らのデータ同期プラクティス僕らのデータ同期プラクティス
僕らのデータ同期プラクティス
 
AndroidLint #DroidKaigi
AndroidLint #DroidKaigiAndroidLint #DroidKaigi
AndroidLint #DroidKaigi
 

Similaire à Action Bar Compat読んでみた

Android api-levels
Android api-levelsAndroid api-levels
Android api-levelsKazuaki Ueda
 
つ部 Android 勉強会 2013年9月 発表資料
つ部 Android 勉強会 2013年9月 発表資料つ部 Android 勉強会 2013年9月 発表資料
つ部 Android 勉強会 2013年9月 発表資料Kenji Nagase
 
AndroidのUI設計で押さえておきたいポイント
AndroidのUI設計で押さえておきたいポイントAndroidのUI設計で押さえておきたいポイント
AndroidのUI設計で押さえておきたいポイントTakayuki Inoue
 
冬だからAndroid再入門
冬だからAndroid再入門冬だからAndroid再入門
冬だからAndroid再入門Katsumi Honda
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Yuki Higuchi
 
Android multiscreen
Android multiscreenAndroid multiscreen
Android multiscreenKazuaki Ueda
 
Droidcon London2012 Speaker Experience
Droidcon London2012 Speaker ExperienceDroidcon London2012 Speaker Experience
Droidcon London2012 Speaker ExperienceKenichi Kambara
 
Androidレイアウトのスタンダードアプローチ
AndroidレイアウトのスタンダードアプローチAndroidレイアウトのスタンダードアプローチ
AndroidレイアウトのスタンダードアプローチTakao Sumitomo
 
Using the Fragments(Android)
Using the Fragments(Android)Using the Fragments(Android)
Using the Fragments(Android)Teruaki Kinoshita
 
iPhoneとAndroidのアプリ開発最新潮流
iPhoneとAndroidのアプリ開発最新潮流iPhoneとAndroidのアプリ開発最新潮流
iPhoneとAndroidのアプリ開発最新潮流Rakuten Group, Inc.
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324Tak Inamori
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化Takashi Okamoto
 
Windows 8 ストア アプリ 開発 Tips
Windows 8 ストア アプリ 開発 TipsWindows 8 ストア アプリ 開発 Tips
Windows 8 ストア アプリ 開発 TipsFujio Kojima
 
[ABC2012S]Android2x/3x/4x対応アプリ開発Tips
[ABC2012S]Android2x/3x/4x対応アプリ開発Tips[ABC2012S]Android2x/3x/4x対応アプリ開発Tips
[ABC2012S]Android2x/3x/4x対応アプリ開発TipsKenichi Kambara
 
「Windows 8 ストア アプリ開発 tips」 vsug day 2012 winter (2012年12月15日)
「Windows 8 ストア アプリ開発 tips」  vsug day 2012 winter (2012年12月15日)「Windows 8 ストア アプリ開発 tips」  vsug day 2012 winter (2012年12月15日)
「Windows 8 ストア アプリ開発 tips」 vsug day 2012 winter (2012年12月15日)vsug_jim
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーImamura Masayuki
 
PhoneGapの始め方
PhoneGapの始め方PhoneGapの始め方
PhoneGapの始め方akabana
 

Similaire à Action Bar Compat読んでみた (20)

Android api-levels
Android api-levelsAndroid api-levels
Android api-levels
 
つ部 Android 勉強会 2013年9月 発表資料
つ部 Android 勉強会 2013年9月 発表資料つ部 Android 勉強会 2013年9月 発表資料
つ部 Android 勉強会 2013年9月 発表資料
 
AndroidのUI設計で押さえておきたいポイント
AndroidのUI設計で押さえておきたいポイントAndroidのUI設計で押さえておきたいポイント
AndroidのUI設計で押さえておきたいポイント
 
冬だからAndroid再入門
冬だからAndroid再入門冬だからAndroid再入門
冬だからAndroid再入門
 
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.
 
Android multiscreen
Android multiscreenAndroid multiscreen
Android multiscreen
 
Droidcon London2012 Speaker Experience
Droidcon London2012 Speaker ExperienceDroidcon London2012 Speaker Experience
Droidcon London2012 Speaker Experience
 
Androidレイアウトのスタンダードアプローチ
AndroidレイアウトのスタンダードアプローチAndroidレイアウトのスタンダードアプローチ
Androidレイアウトのスタンダードアプローチ
 
UnicastWS vol.2
UnicastWS vol.2UnicastWS vol.2
UnicastWS vol.2
 
Using the Fragments(Android)
Using the Fragments(Android)Using the Fragments(Android)
Using the Fragments(Android)
 
0621 ndk game
0621 ndk game0621 ndk game
0621 ndk game
 
iPhoneとAndroidのアプリ開発最新潮流
iPhoneとAndroidのアプリ開発最新潮流iPhoneとAndroidのアプリ開発最新潮流
iPhoneとAndroidのアプリ開発最新潮流
 
ABC2012Spring 20120324
ABC2012Spring 20120324ABC2012Spring 20120324
ABC2012Spring 20120324
 
PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化PhoneGapでWebアプリをスマホアプリ化
PhoneGapでWebアプリをスマホアプリ化
 
Windows 8 ストア アプリ 開発 Tips
Windows 8 ストア アプリ 開発 TipsWindows 8 ストア アプリ 開発 Tips
Windows 8 ストア アプリ 開発 Tips
 
[ABC2012S]Android2x/3x/4x対応アプリ開発Tips
[ABC2012S]Android2x/3x/4x対応アプリ開発Tips[ABC2012S]Android2x/3x/4x対応アプリ開発Tips
[ABC2012S]Android2x/3x/4x対応アプリ開発Tips
 
「Windows 8 ストア アプリ開発 tips」 vsug day 2012 winter (2012年12月15日)
「Windows 8 ストア アプリ開発 tips」  vsug day 2012 winter (2012年12月15日)「Windows 8 ストア アプリ開発 tips」  vsug day 2012 winter (2012年12月15日)
「Windows 8 ストア アプリ開発 tips」 vsug day 2012 winter (2012年12月15日)
 
iQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナーiQONの開発手法 at iQONエンジニアセミナー
iQONの開発手法 at iQONエンジニアセミナー
 
PhoneGapの始め方
PhoneGapの始め方PhoneGapの始め方
PhoneGapの始め方
 
Jqm20120804 publish
Jqm20120804 publishJqm20120804 publish
Jqm20120804 publish
 

Plus de Yukiya Nakagawa

Atomic Designは「マルチ」で真価を発揮する
Atomic Designは「マルチ」で真価を発揮するAtomic Designは「マルチ」で真価を発揮する
Atomic Designは「マルチ」で真価を発揮するYukiya Nakagawa
 
Androidの入門書を書いたときに気にしたこと #NDS57
Androidの入門書を書いたときに気にしたこと #NDS57Androidの入門書を書いたときに気にしたこと #NDS57
Androidの入門書を書いたときに気にしたこと #NDS57Yukiya Nakagawa
 
React Nativeの光と闇
React Nativeの光と闇React Nativeの光と闇
React Nativeの光と闇Yukiya Nakagawa
 
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJアグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJYukiya Nakagawa
 
React Native Androidはなぜ動くのか
React Native Androidはなぜ動くのかReact Native Androidはなぜ動くのか
React Native Androidはなぜ動くのかYukiya Nakagawa
 
CSS in JSの話 #friday13json
CSS in JSの話 #friday13jsonCSS in JSの話 #friday13json
CSS in JSの話 #friday13jsonYukiya Nakagawa
 
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組みReact Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組みYukiya Nakagawa
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiYukiya Nakagawa
 
アグリノートを支える技術
アグリノートを支える技術アグリノートを支える技術
アグリノートを支える技術Yukiya Nakagawa
 
Coworking Business Forum in NIIGATA 2013
Coworking Business Forum in NIIGATA 2013Coworking Business Forum in NIIGATA 2013
Coworking Business Forum in NIIGATA 2013Yukiya Nakagawa
 
PechaKucha Niigata #3 2013.7.27
PechaKucha Niigata #3 2013.7.27PechaKucha Niigata #3 2013.7.27
PechaKucha Niigata #3 2013.7.27Yukiya Nakagawa
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリYukiya Nakagawa
 
Corona Caravan #1 Nagaoka
Corona Caravan #1 NagaokaCorona Caravan #1 Nagaoka
Corona Caravan #1 NagaokaYukiya Nakagawa
 
NDS21 feat. JAG Niigata 5
NDS21 feat. JAG Niigata 5NDS21 feat. JAG Niigata 5
NDS21 feat. JAG Niigata 5Yukiya Nakagawa
 

Plus de Yukiya Nakagawa (18)

Atomic Designは「マルチ」で真価を発揮する
Atomic Designは「マルチ」で真価を発揮するAtomic Designは「マルチ」で真価を発揮する
Atomic Designは「マルチ」で真価を発揮する
 
Androidの入門書を書いたときに気にしたこと #NDS57
Androidの入門書を書いたときに気にしたこと #NDS57Androidの入門書を書いたときに気にしたこと #NDS57
Androidの入門書を書いたときに気にしたこと #NDS57
 
React Nativeの光と闇
React Nativeの光と闇React Nativeの光と闇
React Nativeの光と闇
 
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJアグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
アグリノートにおけるGIS情報を活かした圃場・作付管理の取り組み @ FOSS4GJ
 
React Native Androidはなぜ動くのか
React Native Androidはなぜ動くのかReact Native Androidはなぜ動くのか
React Native Androidはなぜ動くのか
 
CSS in JSの話 #friday13json
CSS in JSの話 #friday13jsonCSS in JSの話 #friday13json
CSS in JSの話 #friday13json
 
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組みReact Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
React Nativeアプリをリリースし続けるために、最初に行う8つの取り組み
 
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigiReact Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
React Nativeはクロスプラットフォームモバイルアプリ開発の夢を見るか #DroidKaigi
 
アグリノートを支える技術
アグリノートを支える技術アグリノートを支える技術
アグリノートを支える技術
 
NDS36 Kotlin Cute
NDS36 Kotlin CuteNDS36 Kotlin Cute
NDS36 Kotlin Cute
 
Coworking Business Forum in NIIGATA 2013
Coworking Business Forum in NIIGATA 2013Coworking Business Forum in NIIGATA 2013
Coworking Business Forum in NIIGATA 2013
 
PechaKucha Niigata #3 2013.7.27
PechaKucha Niigata #3 2013.7.27PechaKucha Niigata #3 2013.7.27
PechaKucha Niigata #3 2013.7.27
 
Androidで使えるJSON-Javaライブラリ
Androidで使えるJSON-JavaライブラリAndroidで使えるJSON-Javaライブラリ
Androidで使えるJSON-Javaライブラリ
 
Kosenconf NagaokaNCT
Kosenconf NagaokaNCTKosenconf NagaokaNCT
Kosenconf NagaokaNCT
 
Jagniigata8
Jagniigata8Jagniigata8
Jagniigata8
 
Jagniigata6
Jagniigata6Jagniigata6
Jagniigata6
 
Corona Caravan #1 Nagaoka
Corona Caravan #1 NagaokaCorona Caravan #1 Nagaoka
Corona Caravan #1 Nagaoka
 
NDS21 feat. JAG Niigata 5
NDS21 feat. JAG Niigata 5NDS21 feat. JAG Niigata 5
NDS21 feat. JAG Niigata 5
 

Action Bar Compat読んでみた

  • 1. ActionBarCompat読んでみた 2011/12/12 中川 2011/12/14
  • 2. Agenda • Introduction • ActionBarCompatについて • 読解:ActionBarCompat 2011/12/14
  • 3. どうしてこうなった INTRODUCTION 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
  • 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. よむ。 読解 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