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

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

【AndroidStudio】 便利なAuto Import機能でimportの手間をなくす

# Unresolved reference: ○○
このようなエラーはAndroidStudioで開発しているとよく起きますね。
使いたいクラスや機能などをimportしてないことから起きています。

解決方法としてはOption + Enterキーを押すかImportをの箇所をクリックするとimportコードが記載されて突破できます。
今回はその手間をなくす方法の紹介です。

![スクリーンショット 2022-01-30 11.09.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/574173/f2be6021-c83f-3d55-89ba-6b0011e7bcd6.png)

# Auto Import機能の追加方法

## Android Studio > Preferencesを開く

ここではAndroidStudioの環境設定をしています。
変えたいことのない設定は多くありますが、設定の変更はここで可能です。

![スクリーンショット 2022-01-30 11.13.38.png](

元記事を表示

パーミッションを要求するためアプリの設定画面へ飛ばす【Swift/Kotlin】

# はじめに

Android、iOSに限らず、アプリがBluetoothやカメラを利用する際にはユーザがその権限を許可する必要があります。

許可を求めるポップアップが表示され、そこで「許可する」「許可しない」をユーザが選択します。
「許可する」が選択された場合は特に問題ありませんが、「許可しない」が選択された場合は、もう一度許可を求めたり、設定画面から許可するように促す必要があります。

設定画面から許可を促すために設定画面へ飛ばすコードを以下に記述します。

# iOS

以下のコードでアプリの設定画面へ飛ばすことができます。

“`.swift
if let url = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
“`

以下の画面に飛び、権限の許可ができます。
![名称未設定3.jpg](https://qiita-image-store.s3.ap-northeas

元記事を表示

argumentsを使いactivityからfragmentにオブジェクトを渡す【Android】【kotlin】

フラグメントに値を渡すやり方を備忘録として残します。

activityからactivityへの値の受け渡しはintentを使いました
fragmentに値を渡すときにはargumentsというfragmentが持つプロパティをつかいます。

argumentsはBundleという型のプロパティです。
値を渡すにはBundleのインスタンスを作り、BundleにputIntなどで値を渡します。

オブジェクトを渡す方法は、、、
main.Activity内でfragmentクラス、Bundleクラスをインスタンス化する
インスタンス化したbundleにputParceLable(キー, オブジェクト)
fragmentクラス.arguments = bundle
と繋ぐことで対象のfragmentへオブジェクトを渡すことができる。

前提としてデータクラスを使い@Parcelizeを実装してるとする。

“`main.Activity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCr

元記事を表示

CoordinatorLayoutについて

#はじめに

##早速実装

パレットからAppBarLayoutをconstraintLayoutとかの場所にドラッグ

すると下の画像のようなポップアップが表示される。

Collapsing Toolbarにチェックを入れてOKを押下する。

現段階で実行したのがこちら。
![image.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/704865/339e43e2-7ce9-4

元記事を表示

JUnitでのユニットテストに入門してみた

# はじめに
初めまして、Androidエンジニアのバナナと申します。
Android開発の経験年数はそれなりになるのですが、テストコードを書くことなくここまできてしまったため、今年こそはという思いでテストについてまとめていければと思っています。
Androidテストのバイブルと言われている[Androidテスト全書](https://peaks.cc/books/android_testing)を参考に進めていきます
まずは、JUnitを使って簡単なユニットテストをしていきます。 

# テスト対象クラスの作成
今回は簡単な入力ボックスを想定し、8文字以上の英数字の入力であれば真を返すメソッドを持つクラスを作成していきます。

“`kotlin:InputChecker.kt
class InputChecker {
fun isValid(text: String): Boolean {
if (TextUtils.isEmpty(text)) throw IllegalArgumentException(“Cannot be blank”)

元記事を表示

【Android】ViewPager2を簡単に作ってみる

## はじめに
よくチュートリアル画面などの実装に使われるViewPager2。
早速実装してみようと思い色々調べていたのですが、プログラミング初心者ゆえに意外に混乱してしまったため簡単にまとめてみたいと思います。

* 最近Android開発を始めた方
* ViewPager2について調べているけど記事によって書き方が違うので混乱してきた方

などの参考になればとても嬉しいです。
もしも間違いなどあればご指摘いただけますと幸いです。

## 実装内容
### 完成イメージ
こんな感じの横にスワイプするだけの画面を作ります。

* ページは2ページ
* 無限スワイプはしない

### 作成ファイル
* “` MainActivity.kt“` / “`activity_main.xml“`

元記事を表示

SearchViewのフォーカスの当て方、外し方

#はじめに

SearchViewは少々クセの強いUIですが、検索窓の実装には比較的使用頻度の高いUIですよね。
画面遷移時にフォーカスを当てたり、外したりすることがたまにあったりしますが、いつも調べている気がしますので、まとめておこうと思います。

#フォーカスの当て方

まず、フォーカスを当てるためには、以下を設定する必要があります。

“`
searchView.requestFocus()
searchView.requestFocusFromTouch()
“`

上記を設定することでフォーカスを当てることができます。
ただし、キーボードは立ち上がりません。

キーボードも合わせて立ち上げる必要がある場合は以下を設定する必要があります。

“`
searchView.setOnQueryTextFocusChangeListener { v, _ -> v?.showKeyboard() }
“`

SearchViewはフォーカスが当たったのを待ってからキーボードを表示する処理を実行しないとキーボードが立ち上がらない、といった罠があります。
この点注意が必要です。

元記事を表示

BottomSheetDialogFragmentでJetpack Composeを使う

既存プロジェクトの一部画面をJetpack Compose化していくなかで、BottomSheetDialogFragmentをJetpack Compose化しました。
その際にBottomSheetDialogFragmentのスクロールの処理と、Jetpack ComposeのLazyColumnのスクロールがいい感じに動作しなかったため大苦戦しました。なんとか解決できたのでご紹介します。

ちなみにですが、ボトムシート自体をJetpack Compose化したのではなく、BottomSheetDialogFragmentのまま、レイアウトファイルをJetpack Composeリプレースした感じです。

この記事で実装したサンプルコートも公開しています。

https://github.com/yasukotelin/BottomSheetDialogFragmentWithJetpackCompose

## 普通に実装してみた

まず、普通にレイアウトファイルをJetpack Compose化してみます。ボタンが8つあるちょっと縦に長いボトムシートのイメージです。
Prev

元記事を表示

[Android] flowWithLifecycleを使う際気をつけたいこと

# Lifecycle-awareなFlowの収集
ActivityやFragmentでFlowを収集する際、ライフサイクルに適した動作をする`Lifecycle.repeatOnLifecycle`の利用が[推奨されています](https://developer.android.com/kotlin/flow/stateflow-and-sharedflow?hl=ja#stateflow)。
通常の`LifecycleScope.launchWhen`ではアプリがバックグラウンドにある状態など、ビューが表示されていない場合でもイベントが処理されるためです。

“`kotlin
class LatestNewsActivity : AppCompatActivity() {
private val latestNewsViewModel = // getViewModel()

override fun onCreate(savedInstanceState: Bundle?) {

// Start a coroutine i

元記事を表示

API返却物の日付用Deserializer

#最初に
今回は、APIの返却物でよくある日付を変換してくれるDeserializerを備忘録として残しておきます。

###コード

“`kotlin:
@ExperimentalSerializationApi
@Serializer(forClass = ZonedDateTime::class)
object ZonedDateTimeSerializer : KSerializer {
private val formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME

override fun deserialize(decoder: Decoder): ZonedDateTime =
ZonedDateTime.parse(decoder.decodeString(), formatter)

override fun serialize(encoder: Encoder, value: ZonedDateTime) =
encoder.enc

元記事を表示

Android 12でCaused by java.lang.IllegalStateException You need to use a Theme.AppCompat theme (or descendant) with this activity.

# 概要
AndroidX Core Splashscreenでスプラッシュ画面を作成するとAndroid 12端末で以下のようなクラッシュが発生することがあった。

“`
Caused by java.lang.IllegalStateException You need to use a Theme.AppCompat theme (or descendant) with this activity.
“`

不適切なタイミングで`installSplashScreen` を呼ぶと上記のエラーが発生することがある。

# 対策

件のクラッシュは `開発者向けオプション`で`アクティビティを保持しない`をONにしてアプリをバックグラウンドから起動すると高確率で発生する。

クラッシュの原因は `installSplashScreen` を `super.onCreate` の後に呼んでいたため。

“`MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.o

元記事を表示

Android Studioでpush通知のアイコンを設定する

Firebase Cloud MessagingからAndroidへPush通知を送った際、アプリがバックグラウンドにある時はカスタムアイコンが表示されませんでした。後から考えてみれば文章をよく読んでなかっただけなのですが、性格上またやらかしそうなので忘備録としてまとめてみました。

##はじめに
push通知でカスタムアイコンを使用するためには、android studioにおいてアイコンを設定する必要があります。何も設定しないと、デフォルトの四角いアイコンが表示されます↓(これはこれでかわいい)。

カスタムアイコンの実装方法は、大まかに
①128×128pxの透過画像(png形式)を用意する
②android studioにおいてその画像を通知用のカスタムアイコンとして設定する
に分けられます。

①については、~~面

元記事を表示

[Flutter]初心者でもできる無限スクロールの実装方法

一覧表示画面で、スクロールすると次々にデータを読み込んでいく、無限スクロールを簡単に作る方法を紹介します。
無限スクロールを作る方法がいろいろあるのですが、初心者の自分でもできたのでこれが一番簡単かと思います。

## データを取得するAPIを準備する
今回はAPI経由でデータを取得し、一覧表示するのでまずAPIを準備します。
今回は、以下のswaggerで記載したtitleのみが一覧で返されるAPIを用意しました。次のデータがあれば、レスポンスのoffsetに次の位置が返り、なければ返りません。

“`yml:sample.yml
openapi: 3.0.0
info:
title: sample
version: ‘1.0’
description: sample
contact:
name: murapon
servers:
– url: ‘http://localhost:31180’
paths:
/list:
get:
operationId: get-list
summary: 一覧取得
de

元記事を表示

[Android]忙しい人のためのアーキテクチャガイド~Domain Layer編~

#はじめに
この記事は、シリーズ作です。

https://qiita.com/reo-androider/items/1ca168e290568a578cd6

https://qiita.com/reo-androider/items/18ec55f35c9a4fee66d3

https://qiita.com/reo-androider/items/8a0b7e9644631f44d19e

今回のDomain Layer編は、元々の分量が少ないです。
スクロール数は元と変わらないかもですが、文字数は 1 / 3 くらいにまで縮められたと思います。
#目次
– Domain Layerとは?
– Domain Layerのメリット
– 他の責務との関係
– 呼び出し
– ライフサイクル
– スレッド周り
– Domain Layerの使われ方

##Domain Layerとは?
https://qiita.com/reo-androider/items/1ca168e290568a578cd6#domain-layer
##Domain Layerのメリット
Domain L

元記事を表示

[Android]忙しい人のためのアーキテクチャガイド~Data Layer編~

#はじめに
この記事は、シリーズ作です。
今回は、概要編で少しだけ触れたData Layerについての項目を要約していきます。

Data Layer編はかなり長いので、要約の意義が出てきますね。
分量を 1 / 3 くらいにすぼめています。

https://qiita.com/reo-androider/items/1ca168e290568a578cd6

https://qiita.com/reo-androider/items/18ec55f35c9a4fee66d3
#目次
– Data Layerとは?
– データの公開
– ビジネスロジックの複雑化
– 信頼できる情報源
– スレッド
– インスタンスのライフサイクル
– 良いビジネルモデル
– いろいろなビジネルロジック
– エラーの公開
– 実例

##Data Layerとは?
概要編にまとめてあります。

https://qiita.com/reo-androider/items/1ca168e290568a578cd6

##データの公開
データやデータ操作の機能を公開する時は

– suspend関数を用いる

元記事を表示

【Android】ObjectAnimatorで遊ぼう

※当記事は表示している画像にラグがあります。お許しください。

ObjectAnimatorを使うとこんなことができました。

Transition.gif

~~某シューティングゲー??~~

今回はObjectAnimatorの基本的なアニメーションをまとめます。

## ObjectAnimator

Viewをアニメートしてくれます。
アニメーション対象のViewをTargetと呼び、具体的にどうアニメーションするかを定義しているのがプロパティです。

代表的なプロパティは以下
– ROTATION:回転
– TRANSLATION:移動
– SCALE:拡大縮小
– ALPHA:透過

ほか、いわゆるセッターゲッターがある各属性(backGroudColorのような)なら、大体これでアニメーション化でき

元記事を表示

【Android】独自のViewを描く

# Androidで独自のViewを描く
(当記事はJetPack Compose は使ってません)
円と半円を組み合わせて以下を作ります。

陰陽玉.png

## 手順
1. Viewを継承したカスタムクラスを作成
2. onDraw(canvas) をオーバーロード
3. canvasを組み合わせ、欲しいViewを描く ←メイン
4. ( Layoutファイルに1を配置 )

### 1 Viewを継承したカスタムクラスを作成

“`kotlin.kt
class Onmyoudama @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(c

元記事を表示

[Android] 古いバージョンのRoomを使用した時に出るビルドエラーを解消する(M1 Mac)

## はじめに

M1 MacでAndroid開発をする際、ライブラリのバージョンが古かったりすると問題が起こるケースがあります。

ここでは、その内のひとつの内容・解決方法をご紹介します。

私が問題に遭遇した時は日本語での情報が少なく、解決に苦労したということもあり、ここに残しておこうと思います。

## 開発環境

PC : M1 MacBook Air(2020) 16GB OS:Big Sur
AndroidStudio : ArcticFox arm64 (2020.3.1 patch3)

Room 2.2.5

## なにが起きたか

Androidアプリ開発で使用される、ライブラリ`Room`のビルドが出来ない

#### ビルド時のエラーメッセージ

“`
Execution failed for task ‘:app:kaptDevelopmentDebugKotlin’.
> A failure occurred while executing org.jetbrains.kotlin.gradle.internal.KaptExecution
> ja

元記事を表示

【Android】テキストの長さに応じて高さ拡張+テキストスクロール

# 概要

テキストの長さに応じてレイアウト変更するタイトル付きテキストのビューについて説明。

– テキストの長さが画面高さより短い場合、ビューの幅を変更。
– テキストの長さが画面高さより長い場合、テキスト部分をスクロール。タイトル部分はスクロールしない。

| 短い | 長い(ビュー高さ拡張) | もっと長い(テキストのみスクロール) |
| —- | —- | —- |
| ![Screenshot_1643167486.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/9efe6448-29a0-6419-171d-496d76429baf.png) | ![Screenshot_1643167225.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/8c2e6422-1eca-b5fc-e17b-75a56ef31ddb.png) | ![Screensh

元記事を表示

【Android】バックグラウンド処理をServiceからWorkManagerに移行してみた

# はじめに

皆さん、ごきげんよう!れぶです!
今回の記事は、バックグラウンド処理の実装についてです。

Android 8.0(Oreo)以降、バックグラウンド処理に対する厳しめな制限が導入されました。その結果、Service(特にバックグラウンドサービス)を使った実装をすると、動作が安定しません。詳しくは、[こちら](https://developer.android.com/about/versions/oreo/background?hl=ja#services)を参考にしてみてください。

なので、バックグラウンド処理を行う際には、Android Jetpack系の[WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager?hl=ja)を使うことをGoogleは推奨しています。このWorkManagerは、電池寿命の向上・互換性の高さ・様々な条件や制約を付与できるなど、メリットが沢山あります。API level 14から機能します。

そのような背景から、今回は`S

元記事を表示

OTHERカテゴリの最新記事