Android開発やる

mixiの研修資料に従う

Activity: ライフサイクルを持つ画面のある処理(Controller要素)
Service: 画面のないバックグラウンド処理
View: 画面上に何かを表示するためのコンポーネント
レイアウトXML: 1画面に必要なViewを記述するXML

レイアウトXML、Storyboardみを感じる

とりあえずスライドサラッと通しで読んだ

サブ資料

これでなんでLayoutファイルと紐づくんだろう?
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
}

Layoutファイル、スプリットでわけることができる

ビルド、Ctrl + Rなのか

UI開発どうやってやってんだろ?
Android Studio上のGUI操作? XML直編集?

ConstraintLayout、白丸をドラッグ操作で紐づけることができるみたい

lesson2-answerを見ると、完成したXMLはわかったんだけど、ここに至るまでの操作がよくわからない
自分でやろうとしたら、
app:layout_constraintHorizontal_chainStyle="packed"
android:layout_marginStart="36dp"
の指定がうまくできなかった

- ⌘BがJump To Definition
- ⌘押しながらタップでも飛べそう

Material Design

Jetpack Compose のチュートリアル

Androidのgitignore

git initしたら、色々出てきたので、↓これをやった

import文の粒度が細かくて、コンポーネント使うたびに新しいものimportする必要があるみたいだな

とりあえずこれ書いとけばいいのかな?
import androidx.compose.*
import androidx.compose.ui.*

とりあえずボタンを作成
なぜかColumn * Rowがうまく出ずに苦戦した
多分Modifierをつけるとなんかアレっぽい

Android Studioの操作
Jump to definition
⌘+B
⌘押しながらタップ
ファイル検索
⌘ + O
ファイル内検索
⌘ + ⇧ + F
自動インポートとかのクイックアクション
⌥ + Enter

状態変数の持ち方、
val expanded = remember { mutableStateOf(false) }
こんな感じらしい

Jetpack Composeの思想

ボタンが横一杯に広がるレイアウトにしたいんだけど、これが実現できない
modifier = Modifier.fillMaxSize()
にすると、一行だけになってしまう……

デバッグはLog.d("any key", "message")
Logcatから見る

OutlinedTextField
がないとずっと言われてしまって困っている

デザインガン無視で、一旦動くもんつくるかあ

親コンポーネントで持ってる状態変数を子コンポーネントで変更したいけど、どうしたらいいんだと思ったら、
状態ホイスティング(巻き上げ)って考えがあるらしく、クロージャーを渡す感じになる模様

import文がシュッと補完されるときとされないときの違いがわからない
されないとストレスがヤバい

Android Studioでコード分割したファイルを格納するディレクトリつくりたかったが、難しかった
プロジェクトのディレクトリ構造があるらしいが、ルールがよくわからない
とりあえずcom.example.xxx
から [New] > [Package]

単なるディレクトリじゃなくて、package として切られちゃうのか

.idea/deploymentTargetDropDown.xml
謎の差分が出てきたんだけど、どうもシミュレーターを追加したからっぽい
.gitignore 対象でもいい気がするけど

Enum使いたいんだけど、Kotlinだと、メソッド持たせるとき、抽象クラスをつくらないといけない?

つまりこういうことか。
ちょっとダルいな……
enum class Operator(val symbol: String) {
PLUS("+") {
override fun calculate(lhs: Int, rhs: Int): Int {
return lhs + rhs
}
},
MINUS("-"){
override fun calculate(lhs: Int, rhs: Int): Int {
return lhs - rhs
}
},
MULTIPLY("*"){
override fun calculate(lhs: Int, rhs: Int): Int {
return lhs * rhs
}
},
DIVIDE("/"){
override fun calculate(lhs: Int, rhs: Int): Int {
return lhs / rhs
}
};
abstract fun calculate(lhs: Int, rhs: Int): Int
}

コードのリファクタは一旦完了。
俺のKotlin力的に、この辺りで見切りにしないと延々改善できてしまう。
あとはボタンの配置が今左上詰めになってしまっているので、画面いっぱいに使う感じにレイアウトする

Twitterのスレッドも貼っておく