Android Studio
ショートカット
インデント整形
Command + Option + L
不要インポート削除
Control + Option + O
行複製
Command + D
カスタム
開いているファイルの選択(XcodeのCommand + Shift + J)
Keymap > Other > Select in Project View にショートカットを割り振り。
削除周りのショートカット設定
Keymap > Editor Actions > Backspace, Deleteにショートカットを割り振り。
ワンクリックでファイルを開く設定
プロジェクトツールウィンドウの設定アイコン > Autoscroll to Sourceにチェックを入れる。
Kotlin
Swiftの対応表
guard let
if (num == 0) return
val num = nulable ?: return
Date周り
java.util.dateの理解
https://engineer-club.jp/java-date
java.timeの理解
https://qiita.com/tag1216/items/91a471b33f383981bfaa
月末・月初の取得
val yearMonth: YearMonth = YearMonth.from(LocalDate.now()) // YearMonth.now() でもいける
val start = yearMonth.atDay(1)
val end = yearMonth.atEndOfMonth()
endOfDay
LocalDateTime.now().with(LocalTime.MAX)
LocalDate.now().atTime(LocalTime.MAX)
Date - LocalDateの変換
AndroidではAPI26以降じゃないといろいろと使えないメソッドが多い。
LocalDate from Date
https://stackoverflow.com/a/31453385
https://developer.android.com/reference/java/util/Date.html#toInstant()
val date: Date = Date()
val localDate: LocalDate = Instant.ofEpochMilli(date.time).atZone(ZoneId.systemDefault()).toLocalDate()
// toInstant()を使ってもできそうだけど、API26以降しか使えないので
date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate() // API26以上
Date from LocalDate
https://stackoverflow.com/questions/23944370/how-to-get-milliseconds-from-localdatetime-in-java-8
https://developer.android.com/reference/java/util/Date.html#from(java.time.Instant)
val date: Date = Date(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant().toEpochMilli())
ローカライズを意識したフォーマット
年と月だけを表示したい。国によって表示順もちゃんとしたいとき。
val yearMonthText = DateUtils.formatDateTime(this, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_YEAR or DateUtils.FORMAT_NO_MONTH_DAY)
// January 2020
// 2020年1月
画面遷移周り
戻るボタン実装してて、以下のようにマニフェストに親を指定して戻ってたら、戻るたびにonCreateが呼び出されて変な挙動になった。注意する。
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_close)
<activity android:name=".SubActivity"
android:parentActivityName=".MainActivity" />