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のスレッドも貼っておく