Androidのサポートパッケージについて
v17 Leanback Library
の存在はとりあえず無視しておくとして、Androidのサポートパッケージは何種類かあります。
たぶんv13
パッケージはなぜ存在するのか知らない人が多いと思いますので備忘録も兼ねて。
v4 Support Library
まず、サポートパッケージのv4
とは「サポートパッケージのversion4」ではなく、「AndroidのAPI Lv4以上で利用できるサポートパッケージ」を意味しています。
v4はAndroid 1.6 Donut以上で使えるライブラリで以下の機能を持ちます。
互換性のための機能
- 3.0で追加された
Fragment
のサポート - 3.0で追加された
Loader
のサポート Notification
系のメソッドは@Deprecated
が多く、通知できるスタイルも4.1で大幅に増えたのですが、NotificationCompat
を使うことでその辺をそれほど意識しなくて済む…かも?
新機能
LocalBroadcastManager
。ブロードキャストレシーバーは端末全体に通知するけど、「ローカル」な「ブロードキャストレシーバー」はアプリ内部にのみ通知するためセキュア。実装がすごい短くて面白い。アプリ内部で完結する通知を実装したいときにどうぞ。ViewPager
。スワイプでページを切り替えるインターフェース。SlidingPaneLayout
。マルチペインレイアウトを実現するレイアウト。DrawerLayout
。ナビゲーションドロワーの、ドロワーの部分を実現しているレイアウト。「ナビゲーションドロワーにはActionBar
が必要」みたいな固定概念がありますが、実はこれ単品でも使えます。
興味がないのであまり知らない
- アクセシビリティ系の互換ヘルパ
FileProvider
。複数アプリ間でファイルを共有する機能を提供する。標準の連絡帳やギャラリーでは、パーミッションがなくてもIntent
で呼び出されたときのみ、ユーザーの選択したアイテムだけ、呼び出し元アプリに一時的にアクセス権限を与える機能があるけれど、それのファイルバージョンみたいなものとふわふわ理解してる。
v7 Support Library
v7はAndroid 2.1 Eclair 以上で使えるライブラリで以下の機能を持ちます。
互換性のための機能
- 3.0で追加された
ActionBar
のサポート ActionBarActivity
ShareActionProvider
。SNS連携を実装するときに便利っぽいのだけれど…。
現在は生のActivity
を使わずに、ActionBarActivity
を継承するスタイルを推奨しています。
この場合アプリテーマはAppCompat
を継承する必要があって、これのせいでリソースファイルの見通しが悪くなるのが辛いところ(リソースに名前空間がないから、重複回避にabc__
を使ってるせいで候補として真っ先に上がってくるのが辛い)。
AppCompat
でいくつかのコンポーネントを作ると、マテリアルな感じにtint
カラーを付与してくれます。
- 3.0で追加された
GridLayout
のサポート - ついでに
Space
もバックポート。(GridLayout
のために存在するのだけど、それ以外で使っても割と便利) Switch
がようやくバックポート…。
新機能
Cardview
。カードっぽく見せることができるリストビューのアッパーバージョン。これ必要あります?RecyclerView
。削除・追加にアニメーションを付けられるリストビューのアッパーバージョン。5.0以降で使う場合、LayoutManager
を設定しないとクラッシュすることに注意。ただ、LayoutManager
を設定することでグリッド、横方向のリストも作れます。
ListView
に変わるコンポーネントとしていくつか提案されてますが、歴史あるListView
と比べるとノウハウが蓄積されていないので、変なところでハマって無駄な時間を食ったりします。
興味がないので知らない
v7 mediarouter library
。Choromecastとかその辺?
v8 Support Library
API Lv13から提供された、RenderScript
をv8以降で使えるようにするというものです。
RenderScript
については…迷走してる感があってもにょい。
この辺、自分の理解度が高いと言えない領域なのでなんとも言えないのですが、当初はOpenGLを置き換えるようなアピールがされてたんですけど、JellyBeanからは描画関連の処理がバッサリカットされて、GPGPUによる高速計算を行うクラスになったっぽい??
あとGPCPUを使えない端末にまでバックポートできてしまうのだけど、そのときは普通にCPU使うらしいですね。
C99頑張って書く労力に見合ってないと思うんですよ…。
v13 Support Library
ついに本題。
v13 Support Library
って何のためにあるのか知らない人多いと思うんですよ。
これは「v4でバックポートされたFragment
を使わない」ためにあります。
例えば、ViewPager
をFragmentPagerAdapter
で使う場合を考えると、こいつのコンストラクタはandroid.support.v4.app.FragmentManager
を要求するんです。
// OK
mAdapter = new FragmentPageAdapter(getSupportFragmentManager()){
...(省略)
});
API Lv13以降の普通のActivity
のgetFragmentManager()
で取得されるFragmentManager
はandroid.app.FragmentManager
なので、型の不一致でビルドが通らないわけです。
// NG
mAdapter = new FragmentPageAdapter(getFragmentManager()){
...(省略)
});
ではViewPager
を使うときには、必ずFragmentActivity
やActionbarActivity
を使わなければならないのでしょうか?
いいえ、そこでv13
サポートライブラリが使えるのです。
//OK
mAdapter = new android.support.v13.app.FragmentPagerAdapter(getFragmentManager()){
...(省略)
});