Android関連のことを調べてみた2022年08月29日

Android関連のことを調べてみた2022年08月29日
目次

JetpackComposeとConstraintLayoutを組み合わせる

# Repositpory
https://github.com/yuka1324/recycler_view_to_compose

Branch name:recycler_view

# はじめに
xmlレイアウトにRecyclerViewを実装していた部分をJetpackComposeで書き換えました。
RecyclerViewを置き換えたってわけでもないので単にJetpackComposeでリストを作成したと思っていただければいいです。
xmlに組み込んだり内部でConstraintLayoutの制約を使ったりしています

# 環境
minSdk 26.
targetSdk 32.
Android Studio Chipmunk | 2021.2.1 Patch 1.
Kotlin 1.7.10.
Android Gradle Plugin Version : 7.2.1
Gradle Version : 7.3.3

# 初期設定
build.gradleに追加したものです

“`gradle
buildFeatures { // Enables Jetpack C

元記事を表示

[Android]アプリからURLを指定してインターネット通信を行うための準備

# はじめに
今回は アプリ内でURLを指定してインターネット通信を行う際の前準備の仕方を残します。
簡単なことですが、うっかり忘れてしまうとどんなにビジネスロジックを書いてもインターネット通信を行うことができないので覚えて起きたと思って記事に残します。

# 方法
AndroidManifest.xmlの内に

“`

“`
というパーミッション設定を指定します。
この一文を追加するだけです。

元記事を表示

Android 指定した文字をクリップボードにコピーする

今回は指定した文字をクリップボードにコピーする方法です。

ボタンを押した後に、特定の文字をコピーさせたい。みたいな場合に使用することができます。

“`MainActivity.kt
/**
* クリップボードにコピーする。
*
* @param context コンテキスト
* @param copyText コピーする文字列
*/
private fun copyClipboard(context: Context, copyText: String?) {
val clipboardManager: ClipboardManager = context.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager
clipboardManager.setPrimaryClip(ClipData.newPlainText(“”, copyText))
}
“`

こちらでcopyTextに渡した文字がコピ

元記事を表示

ロケールによって小数点がピリオドかコンマかが変わるので数値⇔文字列変換に注意しよう

ロケールによって数値表現が変わるので注意しようってお話です
特にユーザー端末で実行されるアプリでは、様々なロケールでの動作を考慮する必要があります

日本語や英語では小数点に「.」(ピリオド)を使用するため、これ以外の表現が使われることを意識していない人も多いのではないでしょうか?イタリア、ドイツ、フランス、ロシア語などでは「,」(コンマ)が使われるため、変換時に「.」(ピリオド)が使われることを前提にしていると不具合になってしまう場合があります。

ということで、以下を実行してみましょう。

“`kotlin
fun main() {
Locale.setDefault(Locale.JAPAN)
println(“%.1f”.format(1.1))
println(1.1.toString())
println(“1.1”.toDoubleOrNull())
println(“1,1”.toDoubleOrNull())
println(DecimalFormat().parse(“1,1”).toDouble())

p

元記事を表示

【Flutter】navigation_bar の比較

## 初めに
Flutter には数多くのパッケージが存在し、どれを採用するか迷ってしまうほどです。
今回は navigation_bar に注目して、通常の BottomNavigationBar に加えて、 navigation_bar のパッケージのうち、特に Likes が多い三つを比較したいと思います。

## 準備
今回は以下の三つのパッケージを使用します。
+ [convex_bottom_bar](https://pub.dev/packages/convex_bottom_bar)
+ [curved_navigation_bar](https://pub.dev/packages/curved_navigation_bar)
+ [bottom_navy_bar](https://pub.dev/packages/bottom_navy_bar)

上記の三つのパッケージのバージョンを「 pubspeck.yaml 」に記述します。
パッケージのバージョンは、特に制約がなければ最新のバージョンで問題ありません。

“`yaml: pubspeck.yaml
de

元記事を表示

Version Catalog と Renovateを組み合わせて、Androidのライブラリ更新作業を自動化する

# この記事でやること
`Version Catalog` + `Renovate`で、
Androidのライブラリ更新作業を、かなり楽にできたので、
その方法を紹介したいと思います。

Androidのライブラリの更新作業って大変ですよね。
Android開発だと、一つのプロジェクトで、だいたい10~20くらいのライブラリを使用すると思いますが、
(場合はよってはもっと、Spotifyだと数百とかのレベルらしいです)
使っているライブラリ一つ一つの最新バージョンを、目視で確認するのはしんどいです。:frowning2:

build.gradleに依存関係を直書きしていれば、
Android Studioが、最新バージョンをsuggestしてくれますが、それだと管理が煩雑ですし、

buildSrcのように、依存関係の記述を外だしする方法だと、
管理はしやすいですが、最新バージョンをsuggestしてくれないので、更新が大変です。

`Version Catalog` + `Renovate` なら、管理しやすく、なおかつライブラリの最新バージョンをRenovateがsuggestし

元記事を表示

AndroidアプリからのGoogle Drive API使用方法まとめ – (3) 認証情報設定編

# 目的
– Androidアプリからの Google Drive API Ver.3 (旧REST API) 使用方法をまとめる。
– ここでは下図の手順(b)、デバッグ時にアプリからAPIアクセスする際の認証情報を設定する手順について説明する。
![Key_Certificate_Debug_b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2408239/6fde30d4-aba2-1b51-f259-233f73372269.png)

– 全体の記事は[こちら][link0]

# 環境
– OS:Windows10 Professional 21H2
– Android Studio 2021.2.1
– ブラウザ:Google Chrome 103.0.5060.66(64bit)

# アプリからAPIアクセス時の認証情報登録

(1) Google APIコンソールへログイン。

– [Google Cloud API Console][link1] からGoogle APIコン

元記事を表示

AndroidアプリからのGoogle Drive API使用方法まとめ – (4) アプリ開発編

# 目的
– Androidアプリからの Google Drive API Ver.3 (旧REST API) 使用方法をまとめる。
– ここでは下図の手順(c)、APIアクセスするアプリの開発について説明する。
![Key_Certificate_Debug_c.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2408239/f2c7ee5b-b0e4-1cee-2b64-6418a3972e4a.png)

– 全体の記事は[こちら][link0]

# 環境
– OS:Windows10 Professional 21H2
– Android Studio 2021.2.1
– アプリケーション開発言語:Java
– ブラウザ:Google Chrome 103.0.5060.66(64bit)

# Androidアプリ開発

(1) Androidアプリプロジェクトへ依存関係追加

– プロジェクトがGoogle Drive API のリモートリポジトリに依存していることをビルドスクリプト

元記事を表示

AndroidアプリからのGoogle Drive API使用方法まとめ – (5) アプリ登録後の認証情報設定編

# 目的
– Androidアプリからの Google Drive API Ver.3 (旧REST API) 使用方法をまとめる。
– ここでは下図の手順(d)、開発したアプリをGoogle Playへ登録後にAPIアクセスする際の認証情報を設定する手順について説明する。
![Key_Certificate_Release_d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2408239/5396ae62-d2df-0d08-b145-12bd19fdde15.png)

図1

– 全体の記事は[こちら][link0]

# 環境
– OS:Windows10 Professional 21H2
– Android Studio 2021.2.1
– ブラウザ:Google Chrome 103.0.5060.66(64bit)

# 登録したアプリからAPIアクセス時の認証情報設定

(1) Google Playへアップロードした

元記事を表示

AndroidアプリからのGoogle Drive API使用方法まとめ – (1) 全体編

# 目的
– Androidアプリからの Google Drive API Ver.3 (旧REST API) 使用方法をまとめる。

# 環境
– OS:Windows10 Professional 21H2
– Android Studio 2021.2.1
– ブラウザ:Google Chrome 103.0.5060.66(64bit)

# 概要

– AndroidアプリからGoogle Drive APIを使う手順は以下の通り。

(a) [アプリ情報登録][link0]

– Google APIコンソールで、これから作成するアプリケーションがGoogle Drive APIを使うことを指定し、必要な情報を登録する。

(b) [認証情報登録][link1]

– Google Drive APIはユーザー毎のストレージ領域を利用するため、あらかじめ登録されたアプリを通してアクセスしたユーザーにのみAPIを使えるよう認証を行う。

– AndroidアプリのAPKファイルは、改ざん防止のためアプリ署名鍵を用いてデジタル署名しているが、

元記事を表示

RecyclerViewの下にボタンを配置すると挙動がおかしくなる

# やりたかったこと
下記のような感じで、RecyclerViewのリストの一番下にボタンがあるレイアウトを作成しようとしていました。
(↓完成イメージ)
![完成イメージ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1274260/3afe79f7-b675-2693-68fd-bd1595111f0a.gif)

本来ならRecyclerViewの一部のようにボタンも一緒にスクロールされるはずです。
しかし下にボタンを配置しようとすると、RecyclerViewのスクロールタイミングとボタンがスクロールされるタイミングが異なるためおかしな挙動となってしまいます。
(下のgifだと少しわかりにくいかもしれませんが、下まで行ったスクロールを戻す時にボタンのスクロールが遅れて発生しています。)

![挙動おかしい.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1274260/e9b383fa-0955-3375-5ef

元記事を表示

【Flutter】DatetimePicker の使い方

## 初めに
DatetimePicker とは、以下の画像のようにユーザに年月日を入力してもらうための Widget です。
生年月日の選択などに使用されます。

## 準備
まずは、[DatetimePicker パッケージ](https://pub.dev/packages/flutter_datetime_picker) を「 pubspeck.yaml 」に記述します。
パッケージのバージョンは、特に制約がなければ最新のバージョンで問題ありません。

“`yaml: pubspeck.yaml
dependencies:
flutter:
sdk: flutter

flutter_datetime_picker: ^1.5.1
“`
Pub get をして準備は完了です。

## 実装
まずは

元記事を表示

AndroidでStatusBarとNavigationBarを透過させつつ全画面表示する

# はじめに
ActionBar消してStatusBarとNavigationBarを透過させて全画面表示する方法です。
完成形は以下の通り。

|透過させる前|透過させた後|
|—|—|
|||

# 消していきます
Barを消したいActivityに以下を記述

“`kotlin:MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedIns

元記事を表示

Appiumを用いたモバイルネイティブアプリVRT(Visual Regression Testing)環境を構築する

これまで、iOSネイティブアプリのE2Eテスト実現のために、Appium+TypeScript環境を構築してきました。
最後に、これまで構築してきた環境にVRT環境を追加します。

webdriverioにのサービスに`wdio-image-comparison-service`という画像回帰テストのサービス(プラグイン的な立ち位置)があります。しかし、こちらのサービスはWebブラウザ向けであり、モバイルネイティブアプリでは動作しません。

そこで、筆者は[wdio-native-app-compare](https://github.com/wswebcreation/wdio-native-app-compare)を導入し、モバイルネイティブアプリ上でのVRT環境を構築しました。

# 前提
これまで構築してきたAppium+TypeScript環境についてはこちらの記事をご参考ください。

https://qiita.com/5enxia/items/3e84b3eaaf54fd8e5f00

# 環境構築

## VRT(Visual Regression Testing)の導

元記事を表示

WSAを自作アプリでざくっと調べた感想

Windows Subsystem for AndroidがWindows Insider Previewに載ったということで、ついついうっかり試してしまったので、Android屋から見た雑感をメモっておきます。(2022/8/24現在)

# 結論

ChromebookのAndroidよりもマシ。

以下、雑感。他人のアプリはほぼ使ってません。

# Android バージョン

昨年書かれた記事ではAndroid 11となっていたのですが、インストールされたのはAndroid 12でした。ホーム画面がないのに、Material Youテーマとか死なずに動く。(意味はないけど)
Androidのメジャーアップデートに追随できているので、この先のメジャーアップデートにもついて行けるかも?

# メモリ使用量

Surface Laptop Go (RAM 8GB)にインストールしたところ、起動前 4GB→Androidアプリ起動後 6GB(2GB空き)ぐらいの状態。もう少しメモリ欲しい。

# CPU利用率

Core i5 (4C8T)で、アイドル状態でも4core x 1.0~1

元記事を表示

命名規則の名称と実例をまとめてみた

# 初めに
今回は、Android実装で使う命名規則の名称と実際の形を合わせて紹介していこうと思います。
### 本文
基本的には下記の4種類のみとなります。
* ローワーキャメルケース
* アッパーキャメルケース
* ローワースネークケース
* アッパースネークケース

***ローワーキャメルケース***は`forExample`と記述します。
先頭の頭文字を小文字にして、そのあとに来る要素語の頭文字を大文字にしていく命名規則になります。
関数名や変数名などに多く使われています。


***アッパーキャメルケース***は`ForExample`と記述します。
こちらは***ローワーキャメルケース***の先頭の頭文字も大文字にした場合の書き方です。
こちらはクラス名に多く使われており大きな括りであることが多いです。


***ローワースネークケース***は`for_example`と記述します。
全て小文字で記述し、アンダーバーでつないでいく命名規則になります。
xmlファイルや要素名に使われることが多いです。


***アッパースネークケース***は`FOR_EXA

元記事を表示

【Android】FABのアイコンのTintについて

## 結論

FAB(FloatingActionButton)の色は、
`app:tint=”@null”` もしくは `app:tint=”@color/xxxx”` で指定する。

`app:tint=”@null”` は元のアイコンの色が表示される。
`app:tint=”@color/xxxx”`では、colors.xmlで定義した色やandroidの色を使用できる。
(元のアイコンの色は無視される)

たとえば、Vectorアセットで白色でアイコンつくったけどやっぱ青にしたいなーってときは、
`app:tint=”@color/xxxx”`で指定したほうが便利。

## 備忘録として書くきっかけ

Vectorアセットで作成した白のアイコンを、
FAB(FloatingActionButton)のsrcに設定すると、アイコンの色が黒くなってしまった。

`android:tint=”@color/white”` と指定しても直らなかった。

![スクリーンショット 2022-08-24 162245.png](https://qiita-imag

元記事を表示

ViewStubを含むレイアウトは、ViewStubをinflateしたあとにViewBindingへのbindができないので注意しよう

タイトル通りの罠にはまったので書きます

通常ViewBindingはActivityやFragmentの最初にinflateもしくはbindするだけなので問題は起こらないでしょうが、常時必要ではないモジュールにviewだけを渡して内部で再bindしている箇所があり、そこにViewStubを追加したことで問題が発生しました。

ViewStubを含むレイアウトを扱う際に、以下のようにinflate後にViewBindingへbindしようとすると

“`kotlin
val binding = HogeBinding.bind(view)

binding.viewStub.inflate()

HogeBinding.bind(view)
“`

NullPointerExceptionが発生してクラッシュしてしまいます。

“`
Caused by: java.lang.NullPointerException: Missing required view with ID: com.example.myapplication:id/view_stub
“`

V

元記事を表示

Androidで保険業界の単語帳を作る vol.2 ~画面を作成する~

# オブジェクト構成
単語帳に最低限必要な機能といえば単語の一覧を表示することと、データを保存するデータベースの2点かなと思ってます。
いろいろ調べていたところ、まあうさブラザーズさんが書いている以下のブログの記事のオブジェクト構成がヒントになるんじゃないかと思ったので、こちらを参考にしながら開発していこうかなと思います。

https://www.ma-chanblog.com/2021/02/android-listview.html

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2803693/9b5cc170-ed04-6727-23e3-7d528564098b.png)

「テキスト画面」は今のところ作るつもりはないので、メイン画面とデータベースとそれをつないでいるオブジェクトを作成していこうかなと思います。

今のところどんな風に開発するか、まったく見当がついていませんw

# メイン画面を作成する
メイン画面を作ろうと思いますが、記事を読むとメイン画面も「メイン画面」の

元記事を表示

Android: Kotlin でファイルの MD5 を計算する

Android や JVM 環境の Kotlin でファイルの MD5 を計算する実装です。

# 前提

InputStream からデータを読み込み、JDK の `java.security` を利用して MD5 を計算する方針とします。

ファイルサイズがある程度大きい (1MB ~) 状況を想定し InputStream からの読み込みとしています。

# 実装

“`kotlin
import java.io.InputStream
import java.security.DigestInputStream
import java.security.MessageDigest


val inputStream: InputStream = … // File の inputStream など
val md5 = DigestInputStream(inputStream, MessageDigest.getInstance(“MD5”)).use { input ->
val buffer = ByteArray(1024 * 1024) // buf

元記事を表示

OTHERカテゴリの最新記事