- 1. MPAndroidChart の description位置調整
- 2. 【Androidアプリ】Fragment間の遷移(切り替え)
- 3. Flutterのマテリアル構造とレイアウト ~グリッド形式でカードを追加する~
- 4. Flutterのマテリアル構造とレイアウト
- 5. AndroidアプリでFragmentを作成して表示する
- 6. Android/Pixel 8aでwifi(NEC/Aterm)に繋がらない
- 7. VisualRegressionTest実行をreg-suitからreg-cliへ移行
- 8. Codelabsで作成したAndroidアプリのビルドが失敗する
- 9. 【Unity】Androidでビルドした時に「A problem occurred configuring project ‘:unityLibrary:xrmanifest.androidlib’.」エラーの解消法
- 10. アプリの対象 API レベル 35 で初めて edge-to-edge に対処する[Android View編]
- 11. 正規表現のPatternで指定可能な値
- 12. DroidKaigi2024で気になる登壇まとめ:前半
- 13. 最短でJetpack ComposeにCameraXを導入する
- 14. AndroidのPhoto pickerについて調べたメモ(起動確認編)
- 15. Android Gradle Pulugin で Junit5 を使う言語切り替えテストのための設定 ( Gradle Kotlin DSL )
- 16. edge-to-edge が有効な画面でステータスバーとナビゲーションバーに描画する[Compose編]
- 17. アプリの対象 API レベル 35 で初めて edge-to-edge に対処する[Compose編]
- 18. cameraxとmlkitでバーコード読み取り画面実装Part4
- 19. Playストアの「フォアグラウンド サービスの権限」に対応する
- 20. Compose Multiplatformを触ってみる
MPAndroidChart の description位置調整
Androidアプリで利用されているグラフライブラリの [MPAndroidChart](https://github.com/PhilJay/MPAndroidChart) で、グラフのdescriptionの位置を調整したときのメモです。
[Speed Test/ネット回線速度測定](https://play.google.com/store/apps/details?id=com.hnimrod.speedtest)というAndroidアプリでヒストグラムをBarChartで描画したのですが、デフォルトで設定したdescriptionが以下のようにグラフに重なるように表示されていました。
![before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59203/95b78d2f-6df1-a10d-159c-02d5f88a311f.png)
赤枠のdescriptionをグラフに重ならないように表示するために、BarDataの`yOffset`と`xOffset`を設定して位置調整できま
【Androidアプリ】Fragment間の遷移(切り替え)
# はじめに
こんにちは、エンジニアのkeitaMaxです。
今回は前回作成したFragmentをもう一つ作成して、Fragment間の遷移(切り替え)をやろうと思います。
前回の記事
https://qiita.com/keitaMax/items/720f92d9b51e642b079c
# 実装方法
MainActivityにフラグメントを切り替える関数を作成し、それを各フラグメントから呼んで、画面遷移(切り替え)をおこなようと思います。
# Fragment作成
Fragmentをもう一つ作成しました。名前を`ExampleTwoFragment`としました。
“`kotlin:ExampleTwoFragment
class ExampleTwoFragment : Fragment() {
private var _binding: FragmentExampleTwoBinding? = null
private val binding get() = _binding!!override fun onCreateVi
Flutterのマテリアル構造とレイアウト ~グリッド形式でカードを追加する~
### [5. グリッド形式でカードを追加する](https://codelabs.developers.google.com/codelabs/mdc-102-flutter?hl=ja#4)
#### GridView を追加する
+ アイテム数が固定されていて、列数も決まっているので、`GridView.count()`を使用する
+ プロパティは以下の4つ
+ `crossAxisCount:`(必須)
+ 列数を指定
+ `padding:` (省略可能)
+ グリッド全体の内側の余白を指定
+ `EdgeInsets`クラスを使用して、上下左右の余白を個別に設定できる
+ 例: `padding: EdgeInsets.all(8.0)` (上下左右に8.0の余白)
+ `childAspectRatio:`(省略可能)
+ アイテムの縦横比を指定
+ `childAspectRatio: 1.0`とすると、正方形のアイテムが作成される
+ `children:`(必須)
+ グリッドに表示するウィジェットのリストを
Flutterのマテリアル構造とレイアウト
https://docs.flutter.dev/codelabs#designing-a-flutter-ui
👆を参考に進めていきたいと思います。
### [MDC-102 Flutter: マテリアルの構造とレイアウト](https://codelabs.developers.google.com/codelabs/mdc-102-flutter?hl=ja#3)
#### AppBarの最小構成
“`dart
import ‘package:flutter/material.dart’;void main() {
runApp(
const MaterialApp(
debugShowCheckedModeBanner: false,
home: TutorialHome(),
),
);
}class TutorialHome extends StatelessWidget {
const TutorialHome({super.key});@override
Widget build(Build
AndroidアプリでFragmentを作成して表示する
# はじめに
こんにちは、Androidアプリ開発の勉強を開始したばかりのkeitaMaxです。
https://developer.android.com/guide/fragments/create?hl=ja#kts
公式に従ってやります。
# 設定追加
build.gradleのdependenciesに以下を追加します。
“`
implementation(libs.androidx.fragment.ktx)
“`# フラグメントを追加
フラグメントを追加します。
`File>New>Fragment>FullScreenFragment`の順に操作し、名前を`ExampleFragment`にして追加しました。
![スクリーンショット 2024-07-23 10.43.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/7e9a6f8f-9c76-8569-8059-1610a2f6663c.png)
`ExampleFragment`と`fra
Android/Pixel 8aでwifi(NEC/Aterm)に繋がらない
## 前提
端末:Pixel 8a(Android)
wifi:NEC/Aterm WG1200hs4
パソコンやiPhone、kindleなどは普通に繋がる。## 結論
WPA3を有効にしていたからでした。
暗号化モードをWPA2-PSKのみにすれば解決。(デフォルトではWPA2/WPA3)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/487385/92810450-d084-13be-f5f9-32192697913e.png)
VisualRegressionTest実行をreg-suitからreg-cliへ移行
## reg-cliへの移行を考えたきっかけ
現在チームではVisualRegressionTestを、CI(Bitrise)上のreg-suitで毎晩定期実行しています。
運用してから1年程度経過し、以下のような課題が出ました。1. VRT対象画面がよく変更になるため、そこそこの頻度で正解データの変更をする必要があった(頻度的には平均すると10日に1回程度)
1. 実行時間がそこそこ長い(40枚程度をテスト完了するのに25分程度)
1. 稀に `reg-suit run` 実行後エラーが起きる(頻度的には平均すると週1回程度)## reg-suitからreg-cliへ移行した時のメリット
1. CI環境実行時正解データの変更が割と容易になる
現在正解データ格納場所は所定のクラウドストレージ(GoogleCloudStorage or AWS S3)となっているため、GUIで手順通りにやれば誰でも正解データは入れ替え可能ですが、少々煩雑で操作が直感的ではない等の問題があります。
reg-cliに移行すると、Github管理された場所に正解データを置くため、正解データのディレク
Codelabsで作成したAndroidアプリのビルドが失敗する
# Codelabsを見ながらコードを書いたのにビルドエラーになる
初めてAndroidアプリを作成しようとしたときにまずGoogle Developer Codelabsを利用する方も多いでしょう。
[Android Basics with Compose (英語版)](https://developer.android.com/courses/android-basics-compose/course)
[Compose を用いた Android アプリ開発の基礎(日本語版)](https://developer.android.com/courses/android-basics-compose/course?hl=ja)上記リンクから各コースを開始してコーディングを進めたときにビルドが成功せず、先に進めなくなることがあります。
# 解決策
様々なエラーが発生しますが、Android Studioを最新化することで解決することが多いです。
各Codelabの最初のページに「必要なもの:Android Studio の最新バージョン」と書いてあったりなかったりします(微
【Unity】Androidでビルドした時に「A problem occurred configuring project ‘:unityLibrary:xrmanifest.androidlib’.」エラーの解消法
UnityでAndroidでビルドすると
“`
A problem occurred configuring project ‘:unityLibrary:xrmanifest.androidlib’.
“`というエラーが出るときがある。
この時は「C:\Users\ユーザー名\.gradle\caches」フォルダの中を削除するとうまくいく
アプリの対象 API レベル 35 で初めて edge-to-edge に対処する[Android View編]
Android 15 の動作変更点の一つである [Edge-to-edge enforcement](https://developer.android.com/about/versions/15/behavior-changes-15#edge-to-edge) を読みましたか? アプリの対象 API レベル 35 に上げると edge-to-edge が強制適用されるようですね。これまで edge-to-edge を無視して来てしまい、既存アプリに edge-to-edge が適用されたらどうなってしまうのかわからない、そしてどう対処すれば良いのか悩んでいる人に読んでほしい。
## edge-to-edgeとは
まずは edge-to-edge が何かを知る必要がある。
edge-to-edge と
正規表現のPatternで指定可能な値
# 早速実践
まずはじめに、前提としてですが
Pattern.compile(text)
とすることで、指定された正規表現をパターン化することができます。ここで第二引数を指定するか埋め込みフラグを使用する事で、そのままでは使用できない文字などを指定できます。
|フラグ|内容|埋め込みフラグ|
|:—|:—|:—|
|CANON_EQ|正規等価を有効にする|-|
|CASE_INSENSITIVE|大文字と小文字を区別しないマッチングを有効にする|(?i)
|COMMENTS|パターン内で空白とコメントを使用できるようにする|(?x)
|DOTALL|”.”が行末記号にもマッチするようにする|(?s)
|LITERAL|リテラル構文解析を有効|-
|MULTILINE|複数行モードを有効にする|(?m)
|UNICODE_CASE|大文字と小文字を区別しないマッチを有効にする|(?u)
|UNIX_LINES|Unix ラインモードを有効にする|(?d)# 参考
https://developer.android.com/reference/java/u
DroidKaigi2024で気になる登壇まとめ:前半
# はじめに
今年もDroidKaigi2024が開催されますね!
毎年とても楽しみにしているイベントの一つですが、今回も大変有益な情報に溢れていそうです!
そんな中で個人的に気になる登壇をまとめたいと思います、12、13と記事を分ける形でまとめていきます!# その1:Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜
https://2024.droidkaigi.jp/timetable/689254/
すでにフルComposeで実装しているプロジェクトなどは優先度が下がると思いますが、現状AndroidViewを採用しているプロジェクトからしたら大変有益な情報だと思います。
また、今回の登壇の内容は実際に現場で試行錯誤の末たどり着いた方法とのことで、今後移行を検討しているプロジェクトにはとても参考になる内容になっていそうです。# その2:Kotlin 2.0が与えるAndroid開発の進化
https://2024.droidkaigi.jp/timetable/687445/
まさに現在注目の的となってい
最短でJetpack ComposeにCameraXを導入する
この記事では、
最短でJetpack ComposeにCameraXを組み込むための方法について紹介します!## CameraXとは?
CameraXとは、カメラ機能の開発が簡単にできるJetpackライブラリです。
端末依存などを気にせず、一貫性のあるAPIで開発を行うことができます。とても便利なライブラリなのですが、
ドキュメントや、公式のサンプルをみると、Android Viewでの実装例しか載っておらず、
Jetpack Composeでの実装例がありません。https://developer.android.com/media/camera/camerax?hl=ja
https://github.com/android/camera-samples
今回は、CameraXをJetpack Composeで動かしたい!という人のために、
Jetpack Composeでの実装例を紹介していきます。## CameraXを動かすために必要なもの
具体的なコードの解説に入る前に、
まず、CameraXを動かすために必要なものを整理しましょう。### P
AndroidのPhoto pickerについて調べたメモ(起動確認編)
## なぜ調べたか
2024年8月31日月までにREAD_MEDIA_IMAGESとREAD_MEDIA_VIDEOを要求できるアプリの数を減らすとのことで
その対応としてAndroidの写真選択ツール(Photo picker)の利用を検討する必要があるとのことだがOSバージョンによってどのように起動するのかわからなかったので所有している実機を利用して調べてみた※対応は2025年1月までの延長をリクエストできるらしいです
## はじめに公式情報の確認して実装方法を確認する
https://developer.android.com/training/data-storage/shared/photopicker?hl=ja## 単一選択で実装して起動してみる
* プロジェクトを新規作成する、今回はJetpack Composeを利用して作成
* PhotoPicker用のボタンを作成“`kotlin
@Composable
fun PhotoPickerButton() {val pickMedia =
rememberLauncherF
Android Gradle Pulugin で Junit5 を使う言語切り替えテストのための設定 ( Gradle Kotlin DSL )
通常の Gradle の設定とは少し違っていたため、記録に残します。
動作環境: Android Studio Koala## 作ったプログラム
以前投稿した記事を執筆時に作成した観光地リストアプリの JSON ファイル情報のローカライズを行いました。https://qiita.com/jtakumi/items/daca2ec02cca68f7262d
Android のシステム言語を変えて、アプリを再起動すると読み込む JSON ファイルを切り替えてそれぞれの言語で表示する仕組みです。
使用しているプログラムを簡単に書くと以下のようなものです。“`getDefaultLanguage.kt
fun getLocalizeJSONFileName():String {
// ここで今デフォルトにしている言語を読み出します。
val locale = Locale.getDefault()
val language
edge-to-edge が有効な画面でステータスバーとナビゲーションバーに描画する[Compose編]
edge-to-edge が有効な画面ではステータスバーとナビゲーションバーが透明になり、コンテンツがステータスバーとナビゲーションバーの下生地として表示されます。edge-to-edge が有効な画面がどのように表示されるかは以下の記事を参照してください。
https://qiita.com/seabat-dev/items/b48d56e3d5bc66d52979
上の記事で紹介したが、Scaffold を使用するとコンテンツをステータスバーとナビゲーションバーと被らないように表示できる。Scaffold 直下の Composable 関数に色を付けてみる。
“`kotlin
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge() // edge-to-edge を有効にする。(Android
アプリの対象 API レベル 35 で初めて edge-to-edge に対処する[Compose編]
Android 15 の動作変更点の一つである [Edge-to-edge enforcement](https://developer.android.com/about/versions/15/behavior-changes-15#edge-to-edge) を読みましたか? アプリの対象 API レベル 35 に上げると edge-to-edge が強制適用されるようですね。これまで edge-to-edge を無視して来てしまい、既存アプリに edge-to-edge が適用されたらどうなってしまうのかわからない、そしてどう対処すれば良いのか悩んでいる人に読んでほしい。
## edge-to-edgeとは
まずは edge-to-edge が何かを知る必要がある。
edge-to-edge と
cameraxとmlkitでバーコード読み取り画面実装Part4
# はじめに
今回は長らく間を空けてしまっていたバーコード読み取り機能の最終パートになります
### 本文
実際にカメラのPreviewViewとUseCaseをカメラに紐づける部分の実装になります
“`kotlin
@Composable
internal fun BarCodeCamera(
modifier: Modifier = Modifier,
useCase: UseCase,
) {
Box(modifier = modifier) {
val context: Context = LocalContext.current
val lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current
AndroidView(
modifier = Modifier
.fillMaxWidth()
.aspectRatio(PreviewRatio),
Playストアの「フォアグラウンド サービスの権限」に対応する
# いきなりFGSとか言われる
すっかり毎年恒例となった Play ストアの Android 最新版への対応(※これをやらないとそのアプリの更新ができなくなる)ですが、2024年も Android 14 への対応期限が 8/31 に迫ってきたので targetSdk を 33 から 34 にしてビルド&実行してみたところ、下記のエラーが起きて全然動きませんでした。
“`
android.app.MissingForegroundServiceTypeException: Starting FGS without a type callerApp=ProcessRecord{435fc46 16794:jp.takke.cpustats.debug/u0a296} target
at android.app.MissingForegroundServiceTypeException$1.createFromParcel(MissingForegroundServiceTypeException.java:53)
at android.app.MissingForegrou
Compose Multiplatformを触ってみる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796622/ad1209ef-0318-1d8e-b1d5-d3e763db2f36.png)
## 挨拶
初めまして。
bravesoft株式会社でエンジニアリングマネージャーらしき事をしているおじさんです。以前弊社技術blogにて[KMMについての記事](https://www.bravesoft.co.jp/blog/archives/13377)を書いていたので、今回はUIも共通化出来るようになった「Compose Multiplatform」について触ってみて所感を書いていこうと思います。
## 始め方
まずは[公式](https://www.jetbrains.com/ja-jp/lp/compose-multiplatform/)の[チュートリアル](https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-multiplatform-gett