- 1. [Delphi][小ネタ] Windows / macOS / iOS / Android で等幅フォントを取得する
- 2. なんとなく使いこなしてた気がしてた、StateFlowを理解する
- 3. AndroidをJavaで実装するんですけど色々と分からなかったところまとめます
- 4. 開発初心者がサーバーレスにアプリを作ってみた(Kotlin)
- 5. Kotlin: CalendarProviderでGoogleカレンダーの情報を取り出す
- 6. スワイプして〇〇するモジュールを作ってみた。
- 7. [Android] AlertDialogはDialogFragmentを使って表示させよう
- 8. setup & sample run android app with appium + ruby in Mac
- 9. SurfaceViewとTextureViewの違いを表にまとめる
- 10. [Delphi] Windows / macOS / iOS / Android でアプリのバージョン情報を取得する
- 11. 【Jetpack Compose】WearOSで簡単なアプリを作ってみる
- 12. 【Flutter】Android StudioでLogcatがなぜか存在しない
- 13. Tauri でモバイルアプリをビルドする
- 14. Appiumはじめの一歩(Android版)
- 15. モバイルアプリの良質デザイン6選
- 16. Jetpack ComposeのPaddingValues同士を加算する
- 17. Androidアプリのパケットを(ヘッダだけ)眺めてみる
- 18. [Android] Bitmapのrecycle()は何をしているのか
- 19. Jetpack ComposeのSide-Effectsまとめ
- 20. 【Android】ViewPager2で無限スクロールを実現させてみたら意外と簡単だった
[Delphi][小ネタ] Windows / macOS / iOS / Android で等幅フォントを取得する
# 等幅フォントを取得する
コードはもちろんのこと情報を表示するときとかに等幅フォントが必要になる事があります。
各プラットフォーム毎にフォント名が異なるのでめんどい!のと毎回調べてるので、メソッドにまとめてみました。コードは以下の通り。
“`delphi
(*
* Font Utility
*
* PLATFORMS
* Windows / macOS / iOS / Android
*
* LICENSE
* Copyright (c) 2022 HOSOKAWA Jun
* Released under the MIT license
* http://opensource.org/licenses/mit-license.php
*
* HISTROY
* 2022/12/19 Version 1.0.0 First Release
*
* Programmed by HOSOKAWA Jun (twitter: @pik)
*)unit PK.Utils.Font;
interface
type
TFo
なんとなく使いこなしてた気がしてた、StateFlowを理解する
新しいViewModelを作るときに、`uiState`を必ずといって良いほど定義します。
その際に毎回必ず`stateIn()`を使って`MutableStateFlow`に変換してからコンポーザブルで利用するのですが、いつもこれは一体何をしているんだろうとモヤモヤしながら書いていました。そこで今回は、将来の自分がまた`Flow`や`StateFlow`で迷子にならないための忘備録として、難しいことは一切省いた`StateFlow`の解説記事を残しておこうと思います。
# KotlinにおけるFlowとは一体なんなの?
そもそも、概念的な意味におけるKotlinでのFlowとは、suspend関数を使って非同期に値を生成し、その生成された値を必要としているレイヤー側にて使用するまでの**一連の流れ**のことを表します。
そして、この一連の流れであるFlowは、以下の3つの要素で成り立っています。
– Producer(プロデューサー)
– Intermediary(インターミディアリー)
– Consumer(コンシューマー)## FlowのProducerとは
プ
AndroidをJavaで実装するんですけど色々と分からなかったところまとめます
# Androidってなあに?
Androidは、スマートフォンなどの携帯情報端末のために、Google社が開発したOSです。
毎年バージョンアップした端末が発売されるのでそれに伴ってアプリもバージョンアップしなければいけません(汗)この記事は**自分が詰まって学んだことをツラツラ書いていきます**
少しでも誰かの役に立ちますように・・・# Androidに出てくるJavaの機能
**onCreateメソッド** : プログラムを起動したとき最初に呼び出される
onCreateメソッド内に
“`
super.onCreate(savedInstanceState);
“`
このコードが書かれています。
ここで書かれている**super**というのは、**スーパークラス**を意味します。スーパークラスは、継承する元になっているクラスのことです。スーパークラスにあるonCreateメソッドを最初に呼び出して、スーパークラス側の処理を全部済ませてから、自分の処理を行うようにしています。このように、superは、スーパークラスを示すものとして、そのままメソッドやフィールド名を
開発初心者がサーバーレスにアプリを作ってみた(Kotlin)
## はじめに
Android Advent Calender2022の21日目の記事です。普段はニフクラ mobile backendというアプリ開発のサービスを企画職として運営している立場なんですが、アドベントカレンダーを機にアプリを開発してみました。
初心者なのでコードが変だったりすると思いますが、「自分も最初はこんなもんだったな~」とか思って年末を締めくくるのもたまには良いですよね。そういうのんびりした気持ちでお読みください。
## 開発するもの
開発なんもわからん。コードもわからん。どうすっかなぁ~と悩んだ結果、4択のクイズアプリを開発する事にしました。コードは最後に載せておきます。
※ファイル減らすために1ファイルにたくさん書いてます。下手くそなコードですが一旦動けばよし。
Kotlin: CalendarProviderでGoogleカレンダーの情報を取り出す
# はじめに
**CalendarProvider**を使って、端末に保存されたカレンダーに登録した予定を取得して取り出す方法です。(Googleログインなどは未実装)
GoogleCalendarAPIを叩かなくても簡易的にカレンダー情報を取得することができます。
最後の方に、簡易的にカレンダーを扱ったアプリの例も掲載しています。# 目次
1. 開発環境
2. カレンダーパーミッションの追加
3. アプリがカレンダーへアクセスするためのパーミッション設定
3. コードを書いてみる
3. 実際に使ってみる(アプリの例)
3. さいごに# 開発環境
Android Studio Chipmunk|2021.2.1 Patch1# カレンダーパーミッションの追加
`AndroidManifest.xml`に以下のパーミッションを追加します。“`kotlin: AndroidManifest.xml
スワイプして〇〇するモジュールを作ってみた。
# スワイプして〇〇するモジュールを作ってみた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2612874/ae7ef596-b09b-f90b-0264-69453d9fb124.png)
よく見かける、スワイプして〇〇する機構(↑画像みたいな)を現在のPJのアプリ内に導入したかったのですが、
軽く検索してもライブラリ?や紹介記事がぱっと出てこなかったのでComposeの勉強も兼ねて自作することにしました。(絶対探せばあると思うけど。。。)
パラメータ類を調節すれば各々の好きな挙動が実現できるかと思います。
参考https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary?hl=ja#(androidx.compose.ui.Modifier).swipeable(androidx.compose.material.SwipeableState,kotlin.
[Android] AlertDialogはDialogFragmentを使って表示させよう
以下のように、`AlertDialog`を単体で使用しても、ダイアログを表示すること自体は可能である。
“`kotlin
class ExampleActivity : Activity {
val dialog = AlertDialog.Builder(this)
.setMessage(getString(R.string.order_confirmation))
.setPositiveButton(getString(R.string.ok)) { _, _ -> }
.create()
dialog.show()
}
“`ただし、このようにすると、ユーザーが画面を回転させた場合や戻るボタンを押した場合のように、ライフサイクルに関するイベントが生じた際に、正しくハンドリングされないことがある。
そのため、Dialogのコンテナとして、`DialogFragment`を使用することが推奨されている。
`DialogFragment`を使用することで、ライフサイクルに関するイベント
setup & sample run android app with appium + ruby in Mac
# Outline
先日、java , python によるtest自動化するための構築,sample codeを記載した
Selenium WebDriver Java Simple Program – Login
setup & sample run android app with appium + python in Mac今回は、NativeAPPをRubyでテストするための第一歩までを記述する。
# install ruby 3.x
Mac はDefaultでrubyがinstallされている。ただ、2.6と古いversionであり、3.x系を手動でインストールする
いまのrubyのversionを確認“`
ruby -v
“`
ruby 2.6.8p205 (2021-07-07 revisi
SurfaceViewとTextureViewの違いを表にまとめる
良くごっちゃになるので以下のブログの内容をまとめておきます。
https://medium.com/androiddevelopers/android-hdr-migrating-from-textureview-to-surfaceview-part-1-how-to-migrate-6bfd7f4b970e
||SurfaceView|TextureView|
|—|—|—|
| Google推奨 | ⭕推奨 | ❌ API 24以下でアニメーションしたいときなど特定のシナリオで推奨 |
| 仕組み | Viewの中で穴を開けておいて、その部分位置で直接画面に描画する | Viewとして描画する。一度アプリケーションのレイヤーに画像をコピーする |
| 効率的・バッテリー消費の少なさ | ⭕ (アプリ描画を通さないので効率的) | ❌ (コピーするので非効率) |
| DRM | ⭕ | ❌ |
| 10-bit HDR | ⭕ | ❌ |
| API Level | 1 | 14 |
| 透明度の設定、回転、クリッピング | ❌ | ⭕ |
| アニメーション |
[Delphi] Windows / macOS / iOS / Android でアプリのバージョン情報を取得する
# バージョン番号の指定
Delphi はプロジェクトオプションでバージョン番号を指定できます。
:::note info
Android は VersionCode / VersionName を指定できます。
VersionCode は連番で増えていくもので、VersionName は人間が読めるバージョン情報です。
今回は、VersionName を取得します。
:::画像は各プラットフォーム毎のバージョン番号指定部分を赤枠で示したものです。
左上:Windows
右上:Android
左下:macOS
右下:iOS
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12977/a8ace051-95b2-bcfc-704d-4ab1868479f1.png)# バージョン番号を取得する
バージョン情報ダイアログにバージョンを表示するときやサポートにログを送って貰うときにログにバージョンを仕込んでおくとか、そういう時にバージョン情報が必要になります。
ということでプロ
【Jetpack Compose】WearOSで簡単なアプリを作ってみる
この記事はand factory.inc Advent Calendar 2022 20日目の記事です。
昨日は @yuu__uuki さんの [【SwiftUI】カスタムTabViewを実装してみた](https://qiita.com/yuu__uuki/items/8ddbca8aa833763e62e9) でした。# はじめに
Google製WearOSであるところのPixelWatchが今年10月に発売しました :tada:
私も早々に買ってちょくちょく弄ってみたので、その経験を元に、
JetpackComposeでごく簡単なアプリを作る手順をまとめてみます。## 対象のサーフェスについて
前提として、WearOSにはモバイルよりも多彩なサーフェスが用意されています。![principles_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241152/114cee26-af0d-8824-df64-e4d267088693.png)
[Wear OS 開発の原則 | And
【Flutter】Android StudioでLogcatがなぜか存在しない
# はじめに
普段はVScodeでFlutter開発してるのですが、ある事情によりAndroid Studioを使ってみることになりました。するとLogcatがない。。。。
![Screen Shot 2022-12-19 at 21.34.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/9e247cf6-082a-7269-6945-d8f91c472bee.png)# Event Logにも何もない
https://zenn.dev/fukutan/articles/33e45b48cf8fa6![Screen Shot 2022-12-19 at 21.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/064e3c5b-5605-fdca-bc35-a0dd4e3fcfa4.png)
Event Logに何も表示されません。。。どうしたら良いんですか?ずっとL
Tauri でモバイルアプリをビルドする
株式会社ACCESS Advent Calendar 18日目の記事です。
(今年も私の方でカレンダーの管理をやらせていただいてます。)# 概要
2022/12/09 に Tauri Mobile 2.0.0-alpha.0 がリリースされました。
https://tauri.app/blog/2022/12/09/tauri-mobile-alpha/
こちらを手元で実際に動かしてみた記事になります。
## Tauri とは
https://next–tauri.netlify.app/
Tauri は、[Electron](https://www.electronjs.org/ja/) の代替を目指して開発されている、マルチプラットフォームのフレームワークです。
Tauri の基盤はすべて Rust で実装されており、ファイルサイズとメモリ容量が小さい点が特徴とされています。# 環境
* macOS Ventura 13.0.1
* Intel Core i7 (x86_64)# フロントエンドのビルド
まず初めにフロントエンドをビルドします。
今回は
Appiumはじめの一歩(Android版)
# はじめに
Appiumの[Getting Started](https://appium.io/docs/en/about-appium/getting-started/index.html)を進めていたのですが思ったよりも動かすのに苦労したので手順をまとめておきました。
GettingStartよりも簡単に動く(はず!)https://appium.io/
# 環境
私が用意した環境は以下の通り
– node v16.16.0
– npm 8.11.0
– Java 11
– Android Studio 2021.2.1# AndroidStudioのセットアップ
こちらに従ってインストール・セットアップを済ませます。以下が動くことを確認してください。
– adbコマンド
– appiumを動かすときにadbコマンドを利用するため必要になります
– エミュレータの起動
– ひとまずなんでもOKです。https://appium.io/docs/en/about-appium/getting-started/index.html
# App
モバイルアプリの良質デザイン6選
# この記事について
どうも初めまして。
ARISE analyticsのタコです。
本記事は ARISE analytics Advent Calendar 2022 の19日目の記事になります。今回は個人的に使ったことのあるアプリから好きなデザインのアプリを6個に絞って紹介します。
良いデザインのアプリって触っていて本当に楽しいですよね。
それがユーザーデザインであれ、UIの話であれ。
知ってるわってレベルの超有名なものもあったりするのはご愛嬌という事で。
なおメインのOSはiOSになります。# Disney Resort
iOS:https://apps.apple.com/jp/app/tokyo-disney-resort-app/id1313147771
Android:https://play.google.com/store/apps/details?id=jp.tokyodisneyresort.portalapp&hl=ja&gl=US
リゾートアプリです
早速知らない人を探す方が難しいレベルのDisney様によるアプリです。
とは言ってもディズニーリゾート
Jetpack ComposeのPaddingValues同士を加算する
`LazyColumn` / `LazyRow` の引数で登場する `contentPadding: PaddingValues` で複数の `PaddingValues` を加算したい時のコード例です。
### 実装
“`kotlin
Scaffold(
topBar = {
TopAppBar()
}
) { contentPadding ->
val layoutDirection = LocalLayoutDirection.current
LazyColumn(
contentPadding = PaddingValues(
top = 16.dp + contentPadding.calculateTopPadding(),
start = contentPadding.calculateStartPadding(layoutDirection),
end = contentPadding.calculateEndPadding(l
Androidアプリのパケットを(ヘッダだけ)眺めてみる
PCを使用している場合、ブラウザのインスペクタを開くことで通信している内容・タイミングなんかを眺めることができます。
じゃあモバイル端末の場合はどうなんだということを思ったので、今回はAndroidアプリの通信を眺めてみる話をします。※文中には適宜ふわふわした表現が含まれます。自信がない部分については可能な限りより詳しいドキュメントへの参照を貼らせていただきます。誤りなどあれば指摘いただけると幸いです。
# パケットキャプチャの導入
モバイル端末の通信内容を取得するためにパケットキャプチャを導入します。
>パケットキャプチャー
通信路を流れるパケットを取得するためのツールの機能や、その行為をする者。ツールとしての総称は「スニファー」という。
様々な目的に使われるが、プロトコルの情報を整形し通信状態を解析するツールを「プロトコルアナライザー」という。
https://www.wdic.org/w/TECH/パケットキャプチャー要するに通信内容を取得するツールです。しかし通信内容といっても、例えばメールで送信されたテキストがそのまま読み取れたりといったことは(基本的に)出来ま
[Android] Bitmapのrecycle()は何をしているのか
Bitmapの処理を行なっているライブラリのコードを読むと、Bitmapの`recycle()`メソッドが呼ばれていることに気づく。そこで、Bitmapのrecycle()の挙動について調べたので、以下にまとめる。
### AndroidバージョンごとのBitmapのメモリ管理の違い
前提知識として、以下の公式ドキュメントによれば、Bitmapのメモリ管理の方法は、Androidのバージョンによって異なる。
https://developer.android.com/topic/performance/graphics/manage-memory
まず、Android 2.2 (API level 8) 以下では、GCが発生する際に、アプリのスレッドが停止される。一方、Android 2.3でconcurrent GCが追加され、Bitmapへの参照が無くなった直後に、メモリが回収されるようになった。
また、Android 2.3.3 (API level 10) 以下では、Bitmapのピクセルデータはネイティブメモリに保存される一方で、Bitmap自体はDalvik (J
Jetpack ComposeのSide-Effectsまとめ
本記事は ZOZO Advent Calendar 2022 カレンダー Vol.2 の 18 日目の記事です。
明日の記事は@sassywindの **「Slickにおいてcreated_at, updated_atを意識しないようにする」** です。Jetpack Composeを用いて開発していく中で、かなりの頻度で使用するside-efffect APIですが、どれを使用するか迷うことはありませんか? 筆者は毎回迷うため、それらを明確にする為にも本記事ではユースケースや具体例を交えてメモがてら整理していこうと思います。
またこの記事で使用しているIDEとdependenciesのバージョンはそれぞれ下記になります。
**—使用しているバージョン:—**
`Android Studio:` “Android Studio Electric Eel | 2022.1.1 Canary 10”
`Jetpack Compose:` “1.2.0”
`Kotlin:` “1.7.10”# Codeサンプル
本記事で紹介しているside-effectsのサンプルは、
【Android】ViewPager2で無限スクロールを実現させてみたら意外と簡単だった
# はじめに
皆さん、ごきげんよう!れぶです!今回の記事では、`ViewPager2`×`FragmentStateAdapter`で無限ループさせる方法をまとめます。
`Fragment`間の無限スクロール動作を実現したい方に特に参考になればと思います。それでは、参りましょう!!
# 開発環境
* MacBook Air
* Android Studio Dolphin | 2021.3.1
* Kotlin
* compileSdkVersion 33
* targetSdkVersion 33
* minSdkVersion 21# 動作イメージ
今回は以下のように、縦方向のスクロールで3ページ分を無限ループします。![ezgif.com-gif-maker.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2456250/078d0348-92f0-0ff5-4a13-aa860ec2b58f.gif)
# 考え方
結論、**実際のページに偽の2ページ分を追加する**やり方です。