炊きたてのご飯が食べたい

定時に帰れるっていいね。自宅勤務できるっていいね。子どもと炊きたてのご飯が食べられる。アクトインディでは積極的にエンジニアを募集中です。

iOS エンジニアが Android を開発する時のコンポーネントやウィジェットの比較表


アクトインディ Advent Calendar 2016 21日目の記事になります。子どもとおでかけ情報アプリ「いこーよ」は、マップ上で簡単におでかけ先を探せる検索アプリです。記事を見てくれたパパさん、ママさん、ぜひ一度使ってみてください^^

iko-yo.net

今までは 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 クラスもあります。