iOS エンジニアが Android を開発する時のコンポーネントやウィジェットの比較表
アクトインディ Advent Calendar 2016 21日目の記事になります。子どもとおでかけ情報アプリ「いこーよ」は、マップ上で簡単におでかけ先を探せる検索アプリです。記事を見てくれたパパさん、ママさん、ぜひ一度使ってみてください^^
今までは iOS のアプリ開発をしていたのですが Android アプリも作成することになり iOS のコンポーネントや各ウィジェットが Android で何に対応するのか最初に開発する時に知りたかったので、簡単なところだけですがまとめてみました。
kotlin
アプリケーションのライフサイクル
iOS | Android |
---|---|
AppDelegate | Application |
アプリケーションのライフサイクルを管理するクラスです。プロジェクト作成時に iOS の場合は AppDelegate が作成されますが Android の場合は Application クラスを継承したサブクラスを自分で作成します。
class SampleApplication : Application() { override fun onCreate() { super.onCreate() } }
画面のライフサイクル
iOS | Android |
---|---|
ViewController | Activity |
iOS の場合は画面の遷移は NavigationController に ViewController がスタックされていきます。Android も同様に Activity が Task にスタックされていきます。Android には Modal といった概念はありません(noHistory などを指定することでスタックしないといった設定を行えます)
View
iOS | Android |
---|---|
Xib | Layout(xml) |
iOS の Xib に相当するものが Android では xml で定義する layout ファイルになります。StoryBoard の概念は Android にはありません。
iOS | Android |
---|---|
UIView | View, ViewGroup |
iOS の場合は View は単一でもグループとしても振る舞うことができますが Android は View は常に単一で、複数のView を持つクラスは ViewGroup となっています。 ViewGroup には RelativeLayout, FrameLayout, LinearLayout があり、組みたいレイアウト構成により使い分けます。
iOS | Android |
---|---|
UITableView | ListView, RecyclerView |
Android でリスト表示したい場合には ListView か RecyclerView を利用します。どちらもリスト表示ができ RecyclerView の方がセル毎にレイアウトファイルを分けたりと柔軟に対応できるイメージがあります。
iOS | Android |
---|---|
UICollectionView | RecyclerView, ViewPager |
横スクロールするリストの表示には RecyclerView を利用します。ペラペラとページめくりしたい場合は iOS の場合は UICollectionView の pagingEnabled を true にすると実現できますが RecyclerView にはそのように機能がない為、ページめくりをしたい場合は ViewPager を利用します。
ウィジェット
iOS | Android |
---|---|
UIButton | Button, ImageButton |
iOS では、テキストだけのボタンも画像だけのボタンも UIButton を利用しますが Android では、画像のみのボタンには ImageButton , テキストを表示したい場合には Button を利用します。
iOS | Android |
---|---|
UITextField, UITextView | EditText |
iOS では、 1 行のテキストを扱う場合には UITextField , 複数行のテキストを扱う場合には UITextView を利用しますが、 Android は EditText のプロパティで 1 行か複数行かを制御します。Android で 1 行のテキストを扱う場合は EditText に inputType="text"
を指定します。複数行のテキストを扱う際に layout_height="wrap_content"
を指定した場合のレイアウトの高さは 1 行分なので、レイアウト調整では minLines を指定して何行分のレイアウトを確保するか指定してあげます。
iOS | Android |
---|---|
UILabel | TextView |
iOS では UILabel の numberOfLines に 0 にすることで複数行の可変として扱いますが Android は特にそのような指定は不要です。行数を制御したい場合は maxLines を指定してやります。
iOS | Android |
---|---|
UIImageView | ImageView |
iOS では、画像を非同期で取得する有名なライブラリは SDWebImage だと思いますが Android の場合は Glide と Picasso が有名です。 Glide はメソッド数が多いですが、画像の向き情報( rotate ) を考慮して表示してくれるので便利です。 Picasso も次期バージョンで対応するといった話を聞きました。
iOS | Android |
---|---|
DatePicker | DatePicker |
iOS の DatePicker はドラム型の表示ですが Android の DatePicker はカレンダーで表示されます。 spinner を指定すればドラム型で表示されるようになった気がしますが試していません。
iOS | Android |
---|---|
Picker | NumberPicker |
年月日を扱うときは DatePicker を利用しますが、年月だけを扱いたい場合などは NumberPicker を利用します。
アラート
iOS | Android |
---|---|
UIAlertController | AlertDialog |
Android でアラートを表示する場合は AlertDialog を利用します。AlertDialog を Activity から呼び出してアラートを表示することができますが、 Activity は、画面の回転や OS のメモリ不足などで強制的に Kill されることがある為 DialogFragment を継承した Fragment で実装することが推奨されています。 iOS にはないトースト表示として Activity などの context を必要としない Toast クラスもあります。