- 1. 【Android】WebViewを使ってみた③
- 2. 【Android】WebViewを使ってみた②
- 3. Room/Hiltのkaptをkspにしてみる
- 4. 【Android】WebViewを使ってみた①
- 5. 【Android】Chip使用時にIllegalStateExceptionでクラッシュする問題の対処法
- 6. View.GONEとView.INVISIBLEの再描画パフォーマンスを比較してみた
- 7. Android, Gradle: Lazy Configuration に対応する
- 8. ElixirDesktopでスマホアプリを作る – Android実機に転送する(Google Drive経由)
- 9. 【Android】GoogleMapで地図の操作の有効無効を切りかえる【Kotlin】
- 10. Jetpack Composeで真ん中省略のテキストを実装する
- 11. AnimatedVisibilityをif文で囲んではならない
- 12. UE5 ちょっとまって?!そのcreate widget危険じゃない??
- 13. jetpack composeで折り返しのViewを作る
- 14. Android端末からのリモート開発環境構築(Remote.it&Termus)
- 15. JetpackComposeのscrollについて
- 16. Jetpack Composeでコンテンツのサイズに柔軟に対応しつつ正方形を維持するレイアウト
- 17. Android Bluetooth接続 PINコード setpinで入力(Java)
- 18. Android端末にHMS Coreをインストールする方法
- 19. KMM(Kotlin Multiplatform Mobile)は廃止され KMP(Kotlin Multiplatform)に統一されたよ
- 20. KotlinCoroutineでFirestoreにアクセスする
【Android】WebViewを使ってみた③
## はじめに
WebViewの技術を使って、AndroidのアプリでWebページを表示してみようと思います。
また、webページからAndroidのプログラムのメソッドを呼び出してみたり、Android側のページに戻ったりもしてみようと思います。
プログラムソースがちょっと多めなので、複数回に分けて投稿しようと思います。第三回目はwebページ側の実装です。
#### 計算画面(webページ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/de214956-c349-307f-951e-a8ac0058358d.png)計算画面のhtmlになります。
Cookieの処理は気にしないでください。
モバイルとPCで開いた際にAndroid側のメソッドを呼び出すボタンの表示制御に使用しています。
“`html:index.html
sample
【Android】WebViewを使ってみた②
## はじめに
WebViewの技術を使って、AndroidのアプリでWebページを表示してみようと思います。
また、webページからAndroidのプログラムのメソッドを呼び出してみたり、Android側のページに戻ったりもしてみようと思います。
プログラムソースがちょっと多めなので、複数回に分けて投稿しようと思います。第二回目はトップ画面の実装です。
Android Studioで作成していきます。#### トップ画面(Android)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/61fa020b-b910-2c76-70cd-f219de1744bd.png)##### フォルダ構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/79b6d141-9ad3-2ea2-e80d-2e262e648aa3.png)“`xml:And
Room/Hiltのkaptをkspにしてみる
# この記事の内容
GradleのAnnotationProcesserを、kaptからkspにするお話です。## そもそもAnnotationProcesserって何?
「AnnotationProcesser」は、コンパイルの時にコードを自動生成しましょうという機能です。
これはjavaの機能で、ソースに埋め込まれているアノテーションに基づいてコードを自動生成します。このAnnotateionProcesserをkotlinで書かれたソースでもできるようにしたのが、「kapt(kotlin annotation processer tools)」です。
で、kaptを高速化させたのが、「KSP(kotlin symbol processing)」になります。細かい話は、公式ページにお任せしますが、kaptでは、kotlinからjavaのコードに変換することで、Java AnnotaionProcesserが理解できるようにしてから、コードの自動生成を行っていました。
kspは、kotlinから直接コードを自動生成する(javaで中間コードを生成しない)ので早い!らしいで
【Android】WebViewを使ってみた①
## はじめに
WebViewの技術を使って、AndroidのアプリでWebページを表示してみようと思います。
また、webページからAndroidのプログラムのメソッドを呼び出してみたり、Android側のページに戻ったりもしてみようと思います。
プログラムソースがちょっと多めなので、複数回に分けて投稿しようと思います。第一回目は作成するアプリの紹介をします。
※デザインはこだわっていません。。#### トップ画面(Android)
webページに遷移するためのボタンを配置しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/61fa020b-b910-2c76-70cd-f219de1744bd.png)
#### 計算画面(webページ)
こちらの画面はwebページです。
URLをたたいて、webページにアクセスしています。
計算ボタンを押すことで足し算の結果を求めることができます。
メイン画面に戻るボタンを押すとトップ画面に戻ることができます。
!
【Android】Chip使用時にIllegalStateExceptionでクラッシュする問題の対処法
# はじめに
最近古いプロジェクトのブラッシュアップをお手伝いすることが多いのですが、その際にChipを使用していてクラッシュしてしまうことがありました。
本日はこちらに関して備忘録的にまとめておこうと思います。# クラッシュの対処法
まず、エラーのログは以下になります。“`
Binary XML file line #xx in xxxx/: Binary XML file line #xx in xxxx.debug:layout/view_chip: Error inflating class com.google.android.material.chip.Chipjava.lang.IllegalStateException: Fragment already added: XXXXFragment{33e975e}
“`
エラーの詳細は以上です。
IllegalStateExceptionに目が行きがちですが、重要なのは上部のxmlに関してのエラー文になります。こちらエラーからは原因が全くわからずですが、、、。
原因はthemeを設定していないことが原
View.GONEとView.INVISIBLEの再描画パフォーマンスを比較してみた
# この記事は
AndroidViewでViewを非表示にする場合、Viewに対して`View.GONE`か`View.INVISIBLE`を適用させると思います。(それぞれ違いについては他の記事に詳しく書いてあるので[そちら](https://www.google.com/search?q=view.gone+view.invisible)を参照してください)
しかし、APIの結果や時間の経過によってViewを表示・非表示させたい時がある場合はどちらを適用させたらいいか分からない場合があると思うのでPerfettoを使用してそれぞれの再描画パフォーマンスについて比較していきます# 結論
Viewの表示・非表示が繰り返されそうな場合は`View.INVISIBLE`を使用しましょう## 検証
### 使用したツール
`Perfetto`
ADBを介してAndroidデバイスからパフォーマンス情報を収集するためのツールです。GUI上で簡単に可視化出来るためこちらを使用しましたhttps://developer.android.com/studio/command-line/p
Android, Gradle: Lazy Configuration に対応する
Gradle の設定 (build.gradle.kts) は、Configuration Cache により設定の解釈を高速化する仕組みがあります。
このとき、設定値を遅延評価する Lazy Configuration に対応した記述をしていると Configuration Cache が効く場面が多くなり、ビルド時間の短縮が見込めます。この記事では Gradle の Lazy Configuration について解説します。
Android アプリ開発などで build.gradle.kts を設定したり、Gradle Plugin を開発したりする場合に Lazy Configuration の知識があることで高速な Gradle 実行環境を構築できるようになります。
# Configuration Phase と Configuration Cache
Gradle プロジェクトを実行するとき、以下の3つのフェーズがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com
ElixirDesktopでスマホアプリを作る – Android実機に転送する(Google Drive経由)
こんにちは!
プログラミング未経験文系出身、Elixirの国に迷い込んだ?!見習いアルケミストのaliceと申します。
今回はElixirDesktop + Phoenix1.7のスマホアプリをAndroidスマートフォン実機に転送したいと思います。■「ElixirDesktopでスマホアプリを作る」シリーズの目次
①[Windows11+WSL2に環境構築](https://qiita.com/Alicesky2127/items/5f9a1c6496b1c083720f)
|> ②[Phoenix1.7のアプリを起動](https://qiita.com/Alicesky2127/items/7650f5650069b56bc173)
|> ③[LiveViewを使用してCRUDの機能を実装する](https://qiita.com/Alicesky2127/items/ada99a6b958be18ed270)
|> ④[Android実機に転送する(Google Drive経由)](https://qiita.com/Alicesky2127/items/623628ef
【Android】GoogleMapで地図の操作の有効無効を切りかえる【Kotlin】
# はじめに
前回の記事に引き続きGoogleMapに関しての記事になります。
Maps SDK for Android で作成されているアプリでは、GoogleMapのアプリと同じ操作をすることができ、今回記事にする内容は それをアプリ内で有効無効を切り替えるものになります。
その操作は **ズーム操作、スクロール操作、傾斜操作、回転操作**です。# 実践
|操作|コード|内容|
|:—|:—|:—|
|ズーム操作|googleMap.uiSettings.isZoomGesturesEnabled = false|ダブルタップや二本指でのタップなどのズーム操作を無効にする|
|スクロール操作|googleMap.uiSettings.isScrollGesturesEnabled = false|地図上で指でドラッグするスクロール操作を無効にする|
|傾斜操作|googleMap.uiSettings.isTiltGesturesEnabled = false|地図に2本の指を置いて一緒に上下に動かすときの傾斜操作を無効にする|
|回転操作|googleMap.u
Jetpack Composeで真ん中省略のテキストを実装する
Jetpack Compose の Text の API では `overflow = TextOverflow.Ellipsis` で末尾省略は可能ですが、真ん中省略の API はありません。
`TextView` では `maxLines = 1` のとき限定で真ん中省略が可能でした。
Jetpack Compose を使いつつテキストの真ん中省略はどうしたら実現できそうかいくつか試してみたのでそのメモです。## 実装
### A. `TextUtils#ellipsize` を使う
`TextUtils#ellipsize` という Android の API を使用することで、領域に入る文字数の文字列を省略記号付きで返してくれるメソッドがあります。
https://cs.android.com/android/platform/superproject/main/+/main:frameworks/base/core/java/android/text/TextUtils.java;l=1322-1458
これと Jetpack Compose の `Text`
AnimatedVisibilityをif文で囲んではならない
# はじめに
UI要素を表示させる時にふわっと表示するようにアニメーションさせたくてAnimatedVisibilityを使ったのですが、最初使い方がよく分からなくて間違って使ってたので備忘録としてまとめておきます。
# AnimatedVisibilityをif文で囲むとアニメーションしなくなる
通常フラグがtrueの場合のみComposableを表示したい場合は以下のように書きますよね。
“`kotlin
@Composable
fun AnimatedScreen(
modifier: Modifier = Modifier
) {
Column(modifier = modifier) {
var showAnimation by remember{ mutableStateOf(false) }
Button(onClick = { showAnimation = !showAnimation }) {
Text(text = “フラグを切り替える”)
}//フラグが
UE5 ちょっとまって?!そのcreate widget危険じゃない??
# 端的に言えばGCの話です
現在android向けのアプリをUE5で作っているのですが、デバッグ中にUIを付けたり消したりを繰り返すとどんどんfpsが低下する現象を発見しました。
デバッグコマンドで見てみるとメモリーがかつかつになっていたため調査をした話です。
主にこの問題が起きるのはメモリの少ないモバイルです。## remove系の処理は内部的には破棄されてないぞ!!!
まんまです。remove from parent関数やremove all widgets関数で非表示にすると思いますがこれ、nullptrを代入をしないと永遠にメモリ空間陣取ります!!!
destroy actorとかと同じ感じだと思っていたのがすべての間違いでした。## 実際にやってみよう!
![Desktop Screenshot 2023.08.04 – 23.09.46.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2953041/10a68ebb-7a16-18d7-0e90-cf1036325e69
jetpack composeで折り返しのViewを作る
# はじめに
今回はJetpackComposeを用いて画面いっぱいになったら自動的に折り返してくれるViewを紹介していきます
### 本文
`com.google.accompanist`にある`flowlayout`をプロジェクトに`implemention`することで使えるようになります
“`kotlin
//横
FlowRow(
modifier = Modifier
.fillMaxWidth(),
horizontalArrangement = Arrangement.Start,
maxItemsInEachRow = 4
)
“`
`maxItemsInEachRow`は名前の通り何個までを許容するかです
`horizontalArrangement`は通常の`Arrangement`と同じで間隔や幅寄せを指定することができます。
ただし、注意が必要なのがまだBetaなのもあって`FlowRow`を使う場合該当の`Composable`関数に下記のアノテーションをつけなければいけません。
“`kotlin
@OptIn(
Android端末からのリモート開発環境構築(Remote.it&Termus)
# Android端末からのリモート開発環境構築(Remote.it&Termus)
# 目次
– [はじめに](#はじめに)
– [環境](#環境)
– [構築手順](#構築手順)
– [利用手順](#利用手順)
– [まとめ](#まとめ)# はじめに
この記事では、Android端末からリモート開発環境を構築する方法について紹介します。リモート開発環境の構築には、Remote.itとTermux、Termiusを使用します。Remote.itは、インターネット経由でデバイスにリモートアクセスするためのサービスであり、TermuxはAndroid端末上で動作するターミナルエミュレータです。TermuxによってAndroid端末にSSHサーバ機能とWake on lan機能を導入し、自宅のUbuntuサーバの起動スイッチとして利用します。
UbuntuサーバにもRemote.itとopensshを導入しておき、起動したらこちらもRemote.itでSSH接続するだけ!# 環境
– Android端末1(手持ち)
・Remote.it(Proxyサービス経由でSSHサー
JetpackComposeのscrollについて
# はじめに
Jetpack Composeのscrollについて調べた。
Jetpackでスクロールする場合、2種類の修飾子が利用できる
# scroll 修飾子
https://developer.android.com/jetpack/compose/gestures?hl=ja#scroll-modifiersverticalScroll 修飾子と horizontalScroll 修飾子の2種類があり、要素の中身が最大サイズを超えた場合にスクロールする。
実装は簡単だが、拡張性はあまりない。
内部でScrollable修飾子が使われている。
“`kotlin
Modifier.verticalScroll(rememberScrollState())
“`# scrollable 修飾子
https://developer.android.com/jetpack/compose/gestures?hl=ja#scrollable-modifierscrollableはscroll修飾子と違い、スクロールしても自動で要素のオフセットを動かしてくれない
Jetpack Composeでコンテンツのサイズに柔軟に対応しつつ正方形を維持するレイアウト
ここでは正方形を維持しつつコンテンツサイズに対して柔軟にレイアウトしたい時の実装の紹介です。
## 実装
以下のような `Modifier#layout` で縦横どちらか大きい方をサイズにするといったカスタムレイアウトで実現します。
“`kotlin
Modifier.layout { measurable, constraints ->
val placeable = measurable.measure(constraints)
val width = placeable.width
val height = placeable.height
val size = maxOf(width, height)
layout(size, size) {
val x = (size – placeable.width) / 2
val y = (size – placeable.height) / 2
placeable.placeRelative(x, y)
}
}
“`
Android Bluetooth接続 PINコード setpinで入力(Java)
### ■概要
##### 1:Bluetooth接続テスト
##### 2:PinCodeを手動ではなく、プログラムで挿入し、その後SPP通信でsocketをconnectして、接続状態 & デバイス登録状態をつくる。
##### 3:2の状態を作ることによって、connectがほぼ100%繋がる状態を作る。### ■UI
![Screenshot_2023-08-01-17-06-50-514.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/bd7fd071-f972-39f8-79e3-374a14447e62.jpeg)### ■ソースコード
“`java MainActivity.javapackage com.example.bluetooth_con_test_01;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
impor
Android端末にHMS Coreをインストールする方法
# 手順
1. Android端末のブラウザを起動し、https://consumer.huawei.com/jp/mobileservices/appgallery/ を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/8f79db28-4816-f65f-73a7-1cfaef0ad2de.png)2. 「AppGalleryをインストール」をタップする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/ca88d35a-4906-ad45-1907-4ad5d39b3191.png)3. 画面に表示されているリンクを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704548/74ffcf25-663c-4ad9-a04c-7ff0ffe72
KMM(Kotlin Multiplatform Mobile)は廃止され KMP(Kotlin Multiplatform)に統一されたよ
長らくKotlin界隈でたびたび混乱していた **KMM(Kotlin Multiplatform Mobile)** と **KMP(Kotlin Multiplatform)** がついに終止符が打たれましたね
KMM(Kotlin Multiplatform Mobile)廃止です?
? Update on the name of Kotlin Multiplatform
From now on, “Kotlin Multiplatform” (KMP) is the preferred term when referring to the Kotlin technology for sharing code, regardless of the combination of platforms being discussed.
We are deprecating the “Kotli
KotlinCoroutineでFirestoreにアクセスする
# この記事の内容
kotlin coroutineを使用して、Firestoreのデータ追加とデータ読み取り、コールバックでのデータ読み取りをします。### 前提
FirebaseAuthでのログイン・ログアウトが実装されている前提です。### Firestoreの構成
Firestoreの構成は以下の階層構造になっています。
“`
users – collection
┣ {auth.user1.uid} – document
┃ ┗ spot_list – collection
┃ ┣ spotデータ1 – document
┃ ┗ spotデータ2 – document
┗ {auth.user2.uid} – document
┗ spot_list – collection
┗ spotデータ3 – document
“`
Firestoreは、先頭にCollectionというDocumentを複数格納するコンテナがあります。
Documentは、SubCollectionもしくは単純な文字列とか数値とかを格納でき