Edited at

Android DevelopのトレーニングをKotlinでやってみる -Building Your First App[2]-

More than 3 years have passed since last update.


復習

Android DevelopのトレーニングをKotlinでやってみる -Building Your First App[1]-

http://qiita.com/kamedon39/items/8b814a0d7f0e826cf363

とりあえずKotlin化して実行までできた。


Building Your First Appの続き


Building a Simple User Interface


The graphical user interface for an Android app is built using a hierarchy of View and ViewGroup objects


User InterfaceにはViewとViewGroupの2つあるみたい。

View:ButtonとかTextView...

ViewGroup:LinearLayoutとかRelativeLayout ....

自作でビューを作るときもこの2つのどちらかを継承すればxmlに記述して、呼び出せますね。

以下の5つはkotlinに関係ないので、割愛。xmlに反映します。


Create a Linear Layout


Add a Text Field

基本的なView,ViewGroupをxmlで記述する際の設定項目について書かれてる


Add String Resources

Stringを記述の仕方が書かれてる


Add a Button

以上のことを組み合わせて一つのレイアウトを組み合わせてつくってある


Make the Input Box Fill in the Screen Width

Viewのサイズ調整についてかかれてる

特に注目すべきは、LinearLayoutでレイアウトでよく出てくるandroid:layout_widthが0dp、layout_weightが1の設定。

コンテンツの大きさを設定してるんじゃない!余った領域(余白)の分配だ。

今回はKotlinに注目してるので、割愛する。

この辺を参考に。

http://murakaming.hatenablog.com/entry/20110712/1310457296

<EditText

android:layout_weight="1"
android:layout_width="0dp"
... />


Starting Another Activity


Respond to the Send Button

<Button

android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"
android:onClick="sendMessage" />

個人的にはこの書き方は、好きではない。

Activityなどから見た時にどのボタンがどの処理と結びついてるかわからないためである。

ちょっと冗長になるけど、

<Button

android:id="@+id/btn_send"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_send"/>

findViewById(R.id.btn_send).setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
Log.d("MainActivity", "click: btn_send")
}
});

のほうがどのボタンでどの処理が結びついてるから良いと思ってる。

最近だとこれすら面倒ってことでButterKnifeを使って、アノテーションで書いたりするの多い記事が多い。

http://jakewharton.github.io/butterknife/

    @OnClick(R.id.btn_send)

void clickSend(View v) {
Log.d("MainActivity", "click: btn_send")
}

だけど、未定義だったり、落ちたりするとエラーメッセージが面倒だったりする。。。

Kotlinだと


findViewById(R.id.btn_send).setOnClickListener { view -> Log.d("MainActivity", "click: btn_send") };

でもsetContextViewでしてるlayoutのviewをfindViewByIdをするのは小学生までだよね。。。

せっかくKotlinを使ってるならkotterknife

https://github.com/JakeWharton/kotterknife

確かに使用感はKotlin版ってだけで、良いんだけど。Kotlinの良さをフルに活かしきれてない感が。。。

AndroidStudioのplugin都の組み合わせになるけど、Kotlin Android Extensionsがおすすめだ。

https://kotlinlang.org/docs/tutorials/android-plugin.html

次回脱線するけどKotlin Android Extensionsを紹介する

Respond to the Send Buttonの触りまで終了。


github

https://github.com/kamedon/KotlinAndroidTraining