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

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

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

元記事を表示

[Android][Kotlin]圧縮ネイティブ・ライブラリについて

新規アプリケーションをPlay Consoleにアップロードする場合はAndroid App Bundle (AAB) 形式が義務付けられているが、既存アプリケーションでリリース手順を変更したくないとか、デバッグ用途でadbコマンドで端末にアプリケーションをインストールする場合はAndroid Application Package (APK) 形式でアプリケーションを生成することになる。

Play ConsoleにアップロードされたAABは、ストアによってインストールする端末に対応しAPKを生成し、ストアによって署名して端末にダウンロードされインストールされる。

![AAB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12540/ec80ade4-4223-cc42-9cf7-f75b5ded54a4.png)

アプリケーションのサイズを縮小するという目的で、デフォルト値がサイズ縮小の方向になるようになった。

Gradleで署名されたAPKを生

元記事を表示

Androidで保険業界の単語帳をつくる vol.1 ~いざ、Android Studio!~

# Android Studioを立ち上げる
Androidアプリを作成する開発環境はAndroid Stuidoを使用していきます。
Googleから提供されているIDEで無料でだれでも使えます!

Android Studioを立ち上げるとアクティビティと呼ばれる開発をする際のベースとなる画面の選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2803693/534e54f2-4dbe-ee67-ef4e-2b9c439083df.png)

いろいろあるみたいですが、よくわからないのでEmpty Activityを選択します。

# ソースコードについて
最初に表示されるのは以下の画面
かっちょいい✨
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2803693/9c301353-2695-67f2-191d-166fcaf0b9ff.png)

基本的には画像の通り[activi

元記事を表示

Androidで保険業界の単語帳をつくる vol.0

# この記事について
この記事ではAndroidアプリ開発未経験である私が簡単な単語帳の開発とGoogle Playへのリリースまでを記事にしてまとめていきたいと思ってます。
自分のアウトプット兼学習教材みたいなものです。

# なんで保険業界?
自分自身保険業界に身を置く人間なのですが、専門用語がとにかくたくさんある、、、
保険はその業界で働いている人だけではなく、生きている限り全員関わるものなので、会って損することはないかなと思いました。かなりニッチなものですが、、、
単語帳なんて学習用にみんな開発しそうだし、ニッチなほうがいいでしょ!

少し真面目なことを言うと、義務教育の中で金融教育が実施され始めた時代背景とかもあり、
保険という金融商品をもっと知っていく必要があるのではないかなと思ってます。
その一歩としてこういう単語帳があってもいいんじゃないかなと考えてます^^

# とりあえずやってみる
Googleが提供している学習教材とかやってみたけど、実際に自分が作りたいもの作ってるほうが身につくと思うのでとりあえず開発してみる。

元記事を表示

[Flutter]デプロイゲートでAndroidのプロジェクト名を変えるには

AndroidManifestのlabel名を変更すればOKです。

ディレクトリの場所はこちら。

アプリ名/android/app/src/main/AndroidManifest.xml

![スクリーンショット 2022-08-22 17.26.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494487/e51bd2fc-3f2d-fea4-1328-70c96387d58f.png)

Flutter側のプロジェクト名を変更したのに、なぜか変わらないなーって思って調べたらこんな単純なことでした。

どなたかの参考になれば幸いです。

元記事を表示

【Flutter/Android】DartDefinesで、flavorをする

### FlutterのAndroidで、flavorをする場合、下記の2つある

* flutter_flavorizrを使う
* DartDefinesを使う

flutter_flavorizrは、コマンドで自動的にファイルを作成・変更を行ってくれるので楽なのですが、ファイルが複数出来たり、管理が煩雑になります。
DartDefinesは、手動でファイルを修正する必要がありますが、ファイルが増える訳ではないので、管理が楽になります。
今回は、DartDefinesでflavorを実現したいと思います。

### build.gradleを編集

“`diff_gradle:app/build.gradle

def flutterVersionName = localProperties.getProperty(‘flutter.versionName’)
if (flutterVersionName == null) {
flutterVersionName = ‘1.0’
}

+def dartDefines = [:]
+if (project.hasP

元記事を表示

【Flutter】intro_slider の使い方

## 初めに
intro_slider とは、以下のようなチュートリアルの画面を作成するためのパッケージです。
![intro_slider_sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2609901/7316c25b-ecb8-0b73-4b22-d77848f9862c.gif)

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

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

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

## 実装
まずは実装したい画面で intro_slider をインポートします。
“`dart: ma

元記事を表示

【Android】時間を表示するView『AnalogClock』

# はじめに
前回は デジタル時計を表示する『TextClock』を記事にしました。
よければそちらも見てください →[【Android】時間を表示するView『TextClock』
](https://qiita.com/Tsubasa12/items/443db0ce5d89667a25bf)

今回は アナログ時計を表示する『AnalogClock』を紹介します。

# AnalogClock
使い方としては 先述したTextClockの記事に書いてあるのと同じで
AnalogClockクラスか LayoutにAnalogClockタグを追加して用います。

AnalogClockではデジタル時計のように時計の型式を変えることはできませんが、
AnalogClockでは時計の見た目を変更することができます。

xml側で
android:dial属性で, 時計の文字盤の画像
android:hand_minute属性で, 時計の長針の画像
android:hand_hour属性で, 時計の短針の画像
をそれぞれ指定することができます。

また、AnalogClockはAPI le

元記事を表示

AndroidStidioファイル内のコード置換方法(Mac)

今回はxmlなのでViewのidの名前を変更するときなど、ConstraintLayoutを使用しているとViewのidを複数箇所に記載している事などがあるので、その場合に便利だったりします。

# ファイル内のコード置換方法
`command + F`でまず、検索を表示させます。
ここにリネーム前文字を入力します。

`command + R`でリネーム後の文字を入力します。

Replaceを押すと置換されます。
Replace Allはファイル内全て置換されます。

![スクリーンショット 2022-08-21 19.24.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/c97cdd19-3266-b2de-afc8-fb7b077f0bd1.png)
このスクリーンショットの場合androidがappに置換されます

以上です。

元記事を表示

Room等で作成したDBの配置先とDB内を参照する方法

# はじめに
Room等でデータベース絡みの実装を行う際に、DB内のデータを参照したり、DB消してみたり等色々検証が必要ですよね。
その際に必要不可欠なDBの配置先とDB内を参照する手順を備忘録的にまとめておこうと思います。

# DB配置先確認方法

画面右下のDevice File Exprorerから、[data] > [data] > [パッケージ名] > [databases]の中にroom等で作成したdbが配置されています。
こちらから対象のdbを消したりできるので、検証時に便利です。

# DB内参照方法

Jetpack ComposeでViewModelを使わずに、Composable関数を使って状態とロジックを切り出す!

## はじめに
最近、Androidアプリ開発においてJetpack Composeを使用する機会が増えたことを嬉しく感じています。

この記事では、**Jetpack Compose** で、 **ViewModelを使わないで** に **Composable関数(Factory Function)** を使って、**状態とロジック** をViewの外に切り出す方法 について、説明しています。

**Composable関数(Factory Function)** を使えば **「状態やロジック」** を簡単にViewの外に切り出すことができます。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f39333730332f65613365366164372d306130302d323436342d323935392d3737386566313365363232372e706e67.png](

元記事を表示

OTHERカテゴリの最新記事