2023-01-01から1年間の記事一覧
Androidアプリの良いユニットテストを考える www.youtube.com 基本方針は以下で良さそう Androidフレームワークに依存したコードと依存していないアプリのロジックを切り離してPure Local Test(Robolectricでない単純なテスト)で実行できるようにする Andr…
リッチUIについて色々な事例紹介 speakerdeck.com 文字列や画像のグラデーションや背景追加や矩形追加等 かなりのパターンのアニメーションについても紹介されている 音量制御についてのセッション docs.google.com 音量制御はあまり触れてこなかったので参…
オンラインで参加して気になったセッションのメモ よくあるUIのサンプル github.com 結構使えそうな事例があるので参考になる。 1. ローディング 2. ボトムナビゲーション 3. ボトムシート 4. アコーディオン 5. カルーセル 6. クレジットカード番号入力 7. …
qiita.com これの「子を右から左に配置したい」のところを参考にして上下も変更可能にカスタムした。 @Composable fun InversionLayoutExample( layoutDirection: LayoutDirection = LayoutDirection.Ltr, idStart: Boolean = true) { Column(modifier = Mod…
Kotlin Coroutines Flowについて qiita.com これまでstreamを扱っていた箇所をこれで実装できるかも ViewModelとRetrofitでの通信実装例 satoshun.github.io かなり近い形で使えそう エラーハンドリングこれまでtry-catchでやってたけどrunCatchingの方が見…
パーミッション取得 Jetpack ComposeでPermissionを取得したい - 縁側プログラミング LazyXXXのかくつき こっちはまさにLazyVerticalGrid使ってて気になってたとこだった LazyColumnのスクロールがカクカクするときの確認ポイント(Stableアノテーション) -…
コードは参考サイトからの流用になります。 ViewModelの定義の中で変更を検知したい値(count)をMutableLiveDataとして定義する。初期値はここでは0 class SampleViewModel: ViewModel() { val count = MutableLiveData(0) fun countUp() { val c = count.val…
Column { var displayCount by remember { mutableStateOf(0) } Text( text = "$count", modifier = Modifier.padding(20.dp) ) Button( onClick = { count++ } ) { Text(text = "Count up!") } }displayCountの宣言時にmutableStateOf(0)で初期値を0に設定…
@Composable fun CountUp() { var count: Int by remember { mutableStateOf(0) } Column { Text(text = "$count") Button( onClick = { count += 1 } ) { Text(text = "Count Up!") } } }変数の宣言でby rememberとすることで状態の保存をし、状態の変化を…
Checkboxの中ではなく親要素に指定することで対象を変更できる 修正前 @Composable private fun TopicItem(itemTitle: String, selected: Boolean, onToggle: () -> Unit) { // ... Row( modifier = Modifier .padding(horizontal = 16.dp, vertical = 8.dp)…
RallyDestination でicon、route(destinationを指定するためのString)、表示するComposableをまとめてinterfaceとして定義(本来はComposableは分離するべきとのこと) Overview, Accounts, Bills で各画面に対する値を指定 /** * Contract for informatio…
警告: ViewModel はコンポジションの一部ではありません。そのため、コンポーザブルで作成された状態(保存された値など)は保持しないでください。メモリリークが発生する可能性があります。 とのこと。ViewModel の外部から変更できないように_tasksを定義…
Jetpack Compose の状態のCodeLab続きデータクラスを作って仮データを入れる data class WellnessTask(val id: Int, val label: String) private fun getWellnessTasks() = List(30) { i -> WellnessTask(i, "Task # $i") }このデータクラスのListをLazyColu…
1つのComposableで2つの状態を表現できる。 UI上でそれぞれ別の部品なので更新のあった値(waterCount, juiceCount)に関わるComposableだけが再Composeされる。 @Composable fun StatefulCounter() { var waterCount by remember { mutableStateOf(0) } var j…
更新滞りがちですがちまちま公式のCodeLab進めてます。 背景色の指定 Jetpack Compose のテーマ設定より 要素の色を設定する際は、適切なコンテンツ色である CompositionLocal 値が設定されるため、Surface を使用することをおすすめします。Modifier.backgr…
リストをアニメーションする 状態変数を定義(expanded) 状態による変化幅を定義(extraPadding)。ここでは高さを変える アニメーションさせたい部分で上記で定義した変化幅を指定する var expanded by remember { mutableStateOf(false) } val extraPadding b…
状態の保持 状態はrememberで保持できるが画面回転やプロセス終了で状態破棄されるので保持したい場合はrememberSaveableを使う。 MyApp内での分岐にshouldShowOnboardingを使いたいので定義自体はMyApp内に保持してOnboardingScreenにメソッドを渡す→ボタン…
要素の中央寄せ 中身を中央寄せしたい親要素で以下を指定 verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, Textに背景をつける Surfaceで囲ってSurfaceにcolorを指定する。 Surafceのようなマテリアルコン…
理解出来てなかった部分のメモ materialとmaterial3では色指定方法が若干違う material→MaterialTheme.colors.secondary material3→MaterialTheme.colorScheme.secondary ダークテーマの確認 Composeの前に以下でプレビューにも表示される @Preview( uiMode …
Androidまじめに使えるようにしていこうということでメモがてら記録に残していく。 Handlerクラスはスレッド間でメッセージを受け渡すための仕組み UIを管理するメインスレッドでは、内部的にLooper(メッセージキュー:別スレッドからのメッセージを管理し…