Kotlin

Kotlinはじめます。Android Studio

 

事業部有志でアプリ開発なのだが、私もKotlinを覚えて参加したいのだ(。- .•)

 

 

入門を見ながら頑張ります。

  • Kotlin対応版
  • ハンズオンでたくさんサンプルアプリが作れる

この2つの理由で選びました。良い本です。

 

対象読者

演習しながらのメモ帳です。

気になったら本を買ってみてください、わかりやすくておすすめです。このメモでは私がひっかかったところとか、大事だなってポイントをメモしているものです。

 

まずは開発環境をゲットするのだ

 

Android Studio for Mac

 

 

インストール完了

なかなか格好よろしいな。

 

 

 

 

端末設定

 

上記のアイコンの【AVD Manager】を選択します。

 

 

【Create Virtual Device】をクリックします。

 

 

私のXperiaなんてものがあるわけもなく、【Nexus 5】を選択するのだった。

 

 

PieのDownloadをクリックして、SDKのダウンロードが終わってから、【Next】をクリックします。

 

 

 

チェックボックスを空にして、【Finish】をクリックします。

 

 

再生ボタンを押します。

 

 

画面が現れたら、上にスワイプします。

 

言語設定

 

【Setting】をクリックします。

 

【System】を選択

 

【Languages & input】を選択

 

 

【Add a language】をクリックします。

 

 

最下部付近にある【日本語】を選択します。

 

 

【日本語(日本)】のハンバーガーマークをドラッグして上にもっていきます。優先度があがるのです。

 

こんな感じ!

 

【仮装キーボード】をクリックします。

 

【言語】を選択して、

 

 

【キーボードを追加】をします。

 

 

【日本語】をクリックします。

 

【完了】をクリックします。

 

日付と時刻で、『GMT+09:00 日本標準時』になっていることを確認して、■をクリックします。

 

日本語化されました。

 

 

Hello World! ビルドしてみよう

 

 

【ビルド】ボタンを押します。

 

 

ビルドされてHello World!が表示されました。

 

だいたいわかってきましたね。

 

これからエディタでGUIで画面設計しつつ、細かい部分でKotlinをしこしこと紡いでいく作業に入ります。

 

開発の流れ

  1. プロジェクトの作成
  2. res/layoutフォルダのlayout.xml
    画面構成を設計
  3. javaフォルダの.ktファイル
    アクティビティなどを .ktファイルに処理を記述
  4. res/valuesフォルダのstrings.xml
    表示文字列をきじゅつ
  5. アプリをビルドして動作確認する

 

単位

  • 解像度がスマホによって異なるので開発でpxは使用しない。
  • dp, spを利用します。

 

2つのファイルとGUIのデザインモードを利用してしあげる。

  • res/valuesフォルダのstrings.xml
  • res/layoutフォルダのlayout.xml

Visual Studioライクですね。

WEBのHTML的なのは終わり。

次はイベントへ!

 

リソース管理のRクラス

java/com.example.viewsample/MainActivity.kt

package com.example.viewsample

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

 

このRをR値と呼ぶ。

setContentView(R.layout.activity_main)

 

 

 

 

イベントとリスナ

 

オーバーライド

  • 親クラスを継承した時に子クラスで定義し直すことをオーバーライド
  • Kotlinでは定義し直すメソッドに対して、overrideをつける必要がある

 

MainActivity

findViewById<EditText>(R.id.etName)

activity_main.xml

    <EditText
        android:id="@+id/etName"

etNameという名前で対応している

 

valとvar

  • val 読み込み専用。Getter
  • var 読み書き可能。Getter, Setter

 

 

import

 

インターフェイスとかオブジェクトをimportしたい時

  1. 文字をドラッグで選択状態にする
  2. Option+Enterを押す
  3. セレクターが現れるのでImportを選択する

 

P112

        val adapter = ArrayAdapter(applicationContext,
                                   android.R.layout.simple_list_item_1,
                                   menuList)

 

android.R.layout.simple_list_item_1

android.RはR値が記述されたクラス。このクラスをimportすると、独自のRクラスが読み込まれなくなるので、importしてはいけない。

 

 

ダイアログ

ダイアログ生成クラスを作成する必要があります。

 

 

 

 

 

コンストレイント

 

P129

ビジュアルモードでTextviewを選択して、右のLayoutを押すとGUIでマージンなどを操作できる。

 

  • Designモードで、入力用のフィールドをラベルに所属させてあげる。
  • Plain Text, Email, Multipleなど使い分ける。

 

 

  • etNameの上ハンドルをetTitleの下に連結
  • etNameの左ハンドルをtvNameの右に連結

これで横並びにできます。

 

ガイドライン

メニューからAdd Vertical Guidelineを選択します。

 

 

 

ボタンのチェイン化

  1. コンストレイントで横を繋げる
  2. 3つのボタンを選択した状態右クリック
  3. Create Horizontal Chainを選択する

 

ボタンの均等配置

Chainでグループになっているボタンの、1つだけを選択して右クリックし、【Cycle Chain mode】をクリックします。

 

すると均等配置になります。

 

画面遷移

 

MainActivity.kt

package com.example.intentsample

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ListView
import android.widget.SimpleAdapter

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 画面商品ListViewを取得
        val lvMenu = findViewById<ListView>(R.id.lvMenu)
        // SimpleAdapterで使用するMutableListオブジェクトを用意
        val menuList: MutableList<MutableMap<String, String>> = mutableListOf()
        // 『唐揚げ定食』のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録
        var menu = mutableMapOf("name" to "唐揚げ定食", "price" to "800円")
        menuList.add(menu)
        //「ハンバーグ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録。
        menu = mutableMapOf("name" to "ハンバーグ定食", "price" to "850円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "生姜焼き定食", "price" to "850円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "ステーキ定食", "price" to "1000円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "野菜炒め定食", "price" to "750円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "とんかつ定食", "price" to "900円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "ミンチかつ定食", "price" to "850円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "チキンカツ定食", "price" to "900円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "コロッケ定食", "price" to "850円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "焼き魚定食", "price" to "850円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "焼肉定食", "price" to "950円")
        menuList.add(menu)

        // SimpleAdapter第4引数from用データの用意
        val from = arrayOf("name", "price")
        // SimpleAdapter第5引数to用データの用意
        val to = intArrayOf(android.R.id.text1, android.R.id.text2)
        // SimpleAdapterを生成
        val adapter = SimpleAdapter(applicationContext, menuList, android.R.layout.simple_expandable_list_item_2, from, to)
        // アダプタの登録
        lvMenu.adapter = adapter
    }
}

 

それぞれ対応している

val from = arrayOf("name", "price")
// SimpleAdapter第5引数to用データの用意
val to = intArrayOf(android.R.id.text1, android.R.id.text2)

 

画面遷移のコードと新画面のコードを記述する

 

 

 

 

Unchecked cast: Any! to MutableMap<String, String>の回避

@Suppress("UNCHECKED_CAST") ←●追加
val item = parent.getItemAtPosition(position) as MutableMap<String, String>

きっとこれは良くない、良くないが。。良くないが。。

 

P169

誤植?

本のサンプルコードで動かず。

WEBのサンプルコードと異なっていたが差し替えたら動いた。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Log.i("LifeCycleSample", "Main onCreate() called.")
        super.onCreate(savedInstanceState)
-         setContentView(R.layout.activity_life_cycle_main)
+        setContentView(R.layout.activity_main)
    }

 

class SubActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Log.i("LifeCycleSample", "Sub onCreate() called.")
        super.onCreate(savedInstanceState)
-         setContentView(R.layout.activity_life_cycle_sub)
+        setContentView(R.layout.activity_sub)
    }

 

Logcat

 

 

 

[amazon_link asins=’479816044X’ template=’ProductCarousel’ store=’izayoi55-22′ marketplace=’JP’ link_id=’4a1c1497-c7fb-4e12-bcf1-f687e5dc31d3′]

 

 

 

 

Amazonおすすめ

iPad 9世代 2021年最新作

iPad 9世代出たから買い替え。安いぞ!🐱 初めてならiPad。Kindleを外で見るならiPad mini。ほとんどの人には通常のiPadをおすすめします><

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)