関連資料 宣言的UIの状態管理とアーキテクチャSwiftUIとGraphQLによる実践 https://speakerdeck.com/sonatard/swiftui-graphql 宣言的UI https://speakerdeck.com/sonatard/xuan-yan-de-ui
はじめに 昨今Android/iOSネイティブアプリの開発では「宣言的UIを利用したUIフレームワーク」(以下、このようなフレームワークを宣言的UIフレームワークと本記事では呼称します)が台頭しようとしています。この流れは、Reactの考え方やそれ自体を利用したFlutterやReactNativeのようなマルチプラットフォームフレームワークから始まり、AndroidではJetpackCompose、iOSではSwiftUIと、現在はそれぞれのプラットフォームにも取り込まれるまでになっています。 宣言的UIフレームワークは旧来の手続き的な方法よりもより直感的にUIを記述することができ、採用することでViewの構築をより効率よく行うことができます。これまでは既存のアプリケーションにこの方法を取り入れようとした場合、FlutterやReactNativeであれば新規に言語すら違うフレームワーク
こんにちは! スタメン TUNAG 事業部 モバイルアプリグループのカーキです。 最近では主として Android アプリの開発に携わっています。 株式会社スタメンでは7月の初めに『TUNAG 受付』という、TUNAGのチャット機能を利用したオフィスの受付アプリをリリースしました(Androidのみ対応) (ストアリンク) 『TUNAG 受付』はUIの部分を全て Jetpack Compose で記述しており、アプリ全体の構成もJetpack Composeに合わせたものになっています。 (過去のJetpack Compose導入の経緯などはこちらのブログをご参照ください) 今回は『TUNAG 受付』のアーキテクチャ及び、その構成について紹介します。 TUNAG 受付について まず初めに『TUNAG 受付』がどのようなサービスかについて紹介します。 「TUNAG 受付」では、主に以下の2つ
無力というか、ぱっと見で Enter の挙動について勘違いしてしまうかな、というものです。 JetpackCompose の TextField には singleLine という引数があって、1行しか表示したくない時に利用されます。 var value by remember { mutableStateOf("") } TextField( value = value, onValueChange = { value = it }, singleLine = true ) この状態で、スマートフォンやタブレットにて、ソフトウェアキーボードを使っている時は特に問題なく1行に収まると思うのですが、物理キーボードを接続してEnter キーを押すと改行されてしまい、1行ではなくなってしまいます。 これは正確には、物理キーボード入力でなくとも、改行コードが入ってくると singleLineが t
Googleアカウント認証+FirebaseAuth with JetpackCompose OneTapAuthじゃない方(今までのやり方)のGoogle認証+FirebaseAuth認証を実装していきます。 OneTap認証で実装したクラスを拡張していきます。 関連記事 JetpackComposeでFirebaseAuth(パスワード認証) JetpackComposeでFirebaseAuth(GoogleOneTap認証) JetpackComposeでFirebaseAuth(メールリンク認証) GoogleDevelopersのページ エンドポイント Googleアカウントのエンドポイント エンドポイント
こちらにて現在のコードに至った経緯とエラーケースを書いてますので よければこちらもこちらも見てみて下さい。 やりたい事 クリック、ロングクリック時にアニメーションとクリックイベント ホールドしてカーソルを外すとアニメーションを停止、クリックイベントを起こさない まぁ良くあるボタンイベントである。 だけどJetpackComposeでこれを実装しようと思うと 本当によくわからなくて困り果てていました;;;;;;;; 理由 現状クリックイベントではクリック、ロングクリックには対応できるが、ボタンを離した時・ホールドしてカーソルを外した時などの細かい出し分けには対応していない 細かい出し分けを行うにはpointerInteropFilterを使ってMotionEventによる出し分けをする必要がある しかしpointerInteropFilterを使うとリップルエフェクトを実装する方法がない 空
これを作ります(音あり推奨) はじめに どうも! アルサーガパートナーズでiOSエンジニアをしているウルトラ深瀬です! 今回はUnityで作ったアプリをビューとしてAndroidネイティブアプリに組み込む際に必要になる、Kotlin、JetpackComposeとの連携あれこれを解説していきます! ARシューティングゲーム部分はあくまでも上記を楽しく学ぶ為の題材なのでおまけ程度です。 また、今回程度の内容であればUnityオンリー、もしくはネイティブでARCoreを使うのでも良いですが、Unityとネイティブの相互連携の題材としてあえてこの構成にしています。 この記事で分かること Unity(Unity as a Library)で作ったアプリをAndroidネイティブアプリ上で表示させる為の最低限の設定方法 UnityビューをJetpackComposeのレイアウトに組み込む方法 Nav
ComposeのPagerを調べていてサンプル通りにならんやんけ!!!!! と、ブチギレていたら下記のようにすることで解決しました。 よく見たらA common use-case for HorizontalPager is to be used in conjunction with a TabRow or ScrollableTabRow.って書いてましたね val pagerState = rememberPagerState() // TabRowではなくScrollableTabRowにすることでサンプルと同じ挙動にできる TabRow( // Our selected tab is our current page selectedTabIndex = pagerState.currentPage, // Override the indicator, using the pr
個人開発でカレンダーを作りたくていい感じの方法を探していた時に見つけた 良さげなライブラリの紹介です。 Calendar 知らなかったんですが結構使われてるみたいで、 大分好きに見た目など変えられるみたいで良さそうだし サンプルのカレンダーが豊富🤔 カレンダーを作っていく方法 ライブラリの導入 build.gradleにこちらを追加 dependencies { // Compose用 implementation 'com.kizitonwose.calendar:compose:<latest-version>' } カレンダーの作成 ここにCompose向けの利用法がまとまっている カレンダーの描画に必要になるものなどと、 カレンダーを描画するライブラリ内のComposable関数の呼び出し部分をドキュメント参考に書いていったのが下記 @Composable fun Calenda
Jetpack Composeは、UIを作成するための多くのツールを提供します。Jetpack Composeを使用すると、プロジェクトのMVPを簡単に作成し、その外観を確認できます。たとえば、Androidで通常の方法でリストを作成するには、RecyclerViewを使用する必要があります。そしてもちろん、RecyclerViewでアイテムを管理するためのアダプターとビューホルダーを作成する必要があります。Jetpack Composeでは、簡単に実行できます。 @Composable fun NewsList() { LazyColumn { items(rows) { item -> Text( modifier = Modifier .height(80.dp), text = item ) } } } @Composable fun NewsList() { LazyRow {
はじめに 今回はAndroidの実装しているときに割と忘れがちな画面回転やアプリから離脱した時にActivityの再生成が走った時のUI保存について書いていきます。 まず、従来のViewシステムではActivityまたはFragmentのonSaveInstanceStateを内でBundleに保存する。 またはViewModelにSavedStateHandleコンストラクタ引数を渡して保持するという選択肢もあるかと思います。 一方JetpackComposeではFragmentは基本的に使わず、さらにrememberSaveableというUIの状態を保存するAPIが用意されているためそちらを使用します……というのはComposeの状態保存では必須と言っても過言ではないrememberの派生で存在自体は把握している人がほとんどかと思います。 そこで今回はrememberとremember
最近話題のJetpackComposeですが、1画面まるっと対応は少し不安があるのでカスタムビューから対応してみたいと思ってやってみた記録です。 とりあえず動いたレベルなので、誤りや非推奨のコードもあるかもしれません Build.gradle コードラボやSetupも参考にしてください buildscript { ext { compose_version = '1.0.0-alpha03' } ext.kotlin_version = "1.4.10" repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:4.2.0-alpha12' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_v
匿名ユーザとパスワード認証のユーザで、作成・ログインを行う場合に大体使用するのはこのあたりになります。 ユーザ情報は、signInAnonymously()などの操作系関数の戻り値でも取得できますし、 auth.currentUserの状態変化時に発火するリスナー経由でも取得できます。 匿名ユーザの作成シーケンス auth.addAuthStateListener()で、auth.currentUserの状態変化時に発火するリスナーを登録する Firebase.auth.signInAnonymously()を呼ぶ パスワード認証ユーザの作成シーケンス auth.addAuthStateListener()で、auth.currentUserの状態変化時に発火するリスナーを登録する Firebase.auth.createUserWithEmailAndPassword(email, pa
SwiftUIとJetpackComposeで、同セグメントの機能を両フレームワークでつくろうとした時に きれいに対応関係がまとまっている コピペで動く 最もシンプルな実装 そんな記事があったらいいなと思い、備忘録も兼ねて自分が実装してみた範囲でまとめていきたいと思います。初心者ですので、より良い実装をご存知の方がいらっしゃいましたら、ご教示ください。 今回はチュートリアルなどでよく見かける、スポットライト編です。 対応関係 【SwiftUI】maskを.compositingGroup()修飾子と.luminanceToAlpha()修飾子で反転(ビューの図形をそのまま使える) 【JetpackCompose】Canvasで.clipPathを使う(Canvasで行うため、Pathで図形をつくる必要がある) SwiftUI こちらのmotoshima1150さんの記事を主に参考にさせてい
はじめに 2023年3月からAndroidアプリエンジニアをしている KSND(GitHub、X )といいます。 最近LTしてみたいな〜と漠然に思っていて、PreviewについてLTしたら面白いのではと考えちょっとだけPreviewについて調べましたが大して話せそうなことがなかったのでLTを断念しました。 すぐに忘れてしまいそうだったので思い出せるようにこの記事を書きました。 今後、Preview関連でTipsを知ったらこの記事に追記しようと思ってます。 Previewでダミーのテキストを使いたい時 Composeのライブラリ(androidx.compose.ui:ui-tooling-preview)で用意されているLoremIpsum(ロレムイプサム)というクラスを利用すれば自前でダミーテキストを用意しなくても良くなります。 Android developers - LoremIps
はじめに 昨年、Glanceのアルファリリースがあり、22年3月現在はalpha-03が公開されています。(Glanceとは?) RemoteViewは使用せず、JetpackComposeを使ってウィジェットが作成できるとあって注目されています。 今回は、Glanceを使って1からウィジェットを作成してみたので、使い方やポイントを紹介します。 基本的な作りから、DBから値を取ってきて反映するところまで試してみました。 ベストプラクティスではなく、調べたり試行錯誤したりしつつ行ったので、お気づきの点がありましたらツッコミをいただければと思います。 確認環境 // Glance androidx.glance:glance-appwidget:1.0.0-alpha03 // Kotlin org.jetbrains.kotlin:kotlin-stdlib:1.6.10 // AGP co
SwiftUIとJetpackComposeで、同セグメントの機能を両フレームワークでつくろうとした時に きれいに対応関係がまとまっている コピペで動く 最もシンプルな実装 そんな記事があったらいいなと思い、備忘録も兼ねて自分が実装してみた範囲でまとめていきたいと思います。初心者ですので、より良い実装をご存知の方がいらっしゃいましたら、ご教示ください。 今回は、文字サイズの自動調整編です。 対応関係 【SwiftUI】minimumScaleFactor(_:)修飾子をつける 【JetpackCompose】(現状公式のものはないので)自作のTextコンポーザブルを作成する SwiftUI SwiftUIでは、Textビューに.minimumScaleFactor(最小サイズの倍率)という修飾子をつけることで実現できます。 minimumScaleFactor(_:) 【公式の定義】
Engineer LT#1 Android|Organized by U-NEXTにて発表した内容を記事化しました。 お品書き 発表内容はこちらになります。 Google I/Oの動画や公式ブログに書かれていることもあり、 前半は軽く流します。 Releaseビルドする Composeを使用していてパフォーマンスに問題が出た時には、 minifyをenabledしてR8コンパイラを有効にしてreleaseビルドをして動作確認してください ただ、実装中などにパフォーマンス問題があるのもツラいのでデバッグでも早くなって欲しいです。 Composable関数内に計算処理を書かない こちらのサンプルのようにソート処理などの計算処理をComposable関数内に書くと再Composeされた時に毎回計算(ソート)処理が走るのでパフォーマンスに問題が出る可能性があります。 毎回計算処理が走ることを防ぐた
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く