Android関連のことを調べてみた2020年06月20日

Android関連のことを調べてみた2020年06月20日

Realmでクラス名を変更したい時は…

リファクタリングの一環で、Realmのモデルのクラス名を変更した時のメモです。
(クラス名は変更したいけど、データは引き続き使いたい、というケース。)

# `RealmClass` の `name` を指定すればOK

例えば、 `Dog` というクラス名を `Animal` に変更したい時。

“`kotlin
open class Dog : RealmObject() {
var name: String = “”
}
“`

`@RealmClass` アノテーションを定義して、 `name` に元のクラス名を書けばOKでした。

“`kotlin
@RealmClass(name = “Dog”)
open class Animal : RealmObject() {
var name: String = “”
}
“`


※ ちなみに、**`@RealmClass(“Dog”)`** **`@RealmClass(value = “Dog”)`** と書いてもOKです。 (ref: https://github.com/realm/real

元記事を表示

【Kotlin】初心者向け: Activityのライフサイクルとその可視化

#はじめに 
 この記事は、Kotlin初心者の私が初心者なりに収集した情報を、同じく初心者の方々と共有する目的で作成しました。既存の記事はJava経験者向けの情報がとても多いと感じたので、真っ新の状態からでも理解できるよう、噛み砕いて説明していきます。
# そもそもActivityとは?
 **Activityとは、アプリの画面とその画面に備わる機能の事です。**通常、アプリには複数のActivityが設定されています。メールアプリを例に取ると、メール一覧を表示する画面・メールの内容を表示する画面・メールを作成する画面等々、全て別のアクティビティで構成されています。基本的には、アプリを作るという事はActivityを構築する事と同義です。Activityを行ったり来たりさせることで、アプリに機能の幅を持たせることが出来ます。
# Activityライフサイクルとは?
 ![activity_lifecycle.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/658219/2e5a89dd-0b7c-d8

元記事を表示

[Android]DialogFragment の表示位置を調整する

DilaogFragment の表示位置を調整するのに苦戦したので、備忘録として表示位置の調整方法についてまとめます。例えば次のような DialogFragment があるとします。

“`kotlin
class MainDialogFragment(
private val gravity: Int,
private val verticalMargin: Float,
private val horizontalMargin: Float
): DialogFragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.dialog_fragment_main, container, false)
}
}
“`

“`xml

元記事を表示

[Android] LiveEventまとめ

`LiveData`をイベントの通知(トーストやダイアログを表示指示)として利用する、いわゆる`LiveEvent`の実装をまとめました。

## どれを使えばいいの?
結論から先に言うと、[hadilq/LiveEvent](#hadilqliveevent)または[最初の値を無視](#最初の値を無視)を使うといいと思います。その他に紹介している[SingleLiveEvent](#singleliveevent)、[Event](#event)、[SingleLiveEvent2](#singleliveevent2)は実装に問題があるので使わないほうがいいです。

## SingleLiveEvent
architecture-samplesのTODOアプリで昔使われていたやつ。`MutableLiveData`を継承し`setValue()`等で設定された値は一度だけ`onChanged()`に流れることを保証するクラス。

https://github.com/android/architecture-samples/blob/todo-mvvm-live-kotlin/to

元記事を表示

AndroidのConstraintLayoutでカレンダーの曜日を表示する

#### 1. カレンダーのベースレイアウト

カレンダーのベースになるレイアウトを組みます。
ConstraintLayoutを利用するとこのような形になると思います。

“`activity_main.xml

GitHub Actions で Android アプリのリリース署名をする

リリース用の証明書やパスワード類は、Git リポジトリにコミットすべきではないので、 GitHub Actions のワークフロー上でこれらを用意して署名するようにします。

まずは、アプリのビルド時に自動的に署名がされるような設定を `app/build.gradle` に記述します。

“`gradle:app/build.gradle
// …

signingConfigs {
debug {
// デバッグ用の証明書はリポジトリににコミットしてしまってもよいと思います。
// 今回はプロジェクトのルートに debug.keystore が配置されているものとします。
// デフォルトの証明書であれば、パスワード類の記載は必要ありません。
storeFile rootProject.file(“debug.keystore”)
}
release {
// GitHub Actions のワークフローで、プロジェクトのルートに release.keystore が配置

元記事を表示

Dispatchers.Main.immediateとは?

Qiita初投稿です。何か間違い等ありましたらコメントで指摘いただけると助かります。

coroutineを使う際にDispatcherとして指定できるDispatchers.Main.immediateについて調べたことをまとめてみました。

# 要点
先に要点を述べておきます。

Dispatchers.Main.immediateとは?
* メインスレッドで実行される。
* UI更新を即時行いたい際に使用。

名前から予想できますがメインスレッドで実行されます。本記事では2つ目の「UI更新を即時行いたい際に使用」に焦点を当てて解説していきます。

# 調べた経緯

viewModelScopeを使う際に、デフォルトのDispatcherは何だろうと思い、ソースコードを見てみると以下のようになっていました。

“`kotlin
val ViewModel.viewModelScope: CoroutineScope
get() {
val scope: CoroutineScope? = this.getTag(JOB_KEY)

元記事を表示

Gradleのエラー

“`エラー文
Download https://services.gradle.org/distributions/gradle-5.6.4-all.zip (139.79 MB)
Download https://services.gradle.org/distributions/gradle-5.6.4-all.zip finished succeeded, took 14 s 641 ms
Starting Gradle Daemon…
Gradle Daemon started in 1 s 225 ms

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring root project ‘My Application’.
> Could not resolve all artifacts for configuration ‘:classpath’.
> Could not resolve com.android.tools.build:

元記事を表示

自分のお気に入りyoutube動画を簡単に管理できるアプリの作成

前回の記事は忘れてください…
何というか、調査不足過ぎて普通にAPIがあるし先駆者もいたのでやめました。。。

今日からちょっとしたAndroidアプリを作りたいと思います。

### アプリ概要
* 自分がこのyoutubeの動画いいなぁって思ったものをサクッと管理できる物が欲しい
* 人にあったときこの動画とか見て面白かったんだよねと話題にできる
* youtubeだけでなくツイートとかも管理できるとなお嬉しい
* 【超+α】自分が行った場所で良かった場所とかも管理できたら神

### 機能要件
* youtubeのリンクを管理(登録/閲覧)できる
* 一覧画面はカレンダーになっていて、カレンダーの特定の日を選ぶとその日のクリップ一覧が見れる
* カレンダー検索/フィルタリングができる

### 環境/言語
* Android Studio
* kotlin

## 今日の目標/成果物

環境構築/hello world

### コードと資料

#### 1. 初期設定

流石にAndroid Studioは入っている前提で話します…
![](https://i.imgu

元記事を表示

こんなソースコードはイヤだ-背反事象の分岐にはelseをつけよう

プログラムのソースコードのより良い書き方をまとめていこうと思います。

# 背反事象の分岐にはelseをつけよう

“`sample.kt
if (number > 10) {
print(“10より大きい”)
}
if (number < 0) { print("0より小さい") } ``` [どのようにリファクタリングできるのか](https://www.sentohsharyoga.com/ja/bad_source_code/entry/use_else_in_exclusive_event)

元記事を表示

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/R$string; の解決方法

# 問題

“`gradle
– classpath ‘com.android.tools.build:gradle:3.3.2’
+ classpath ‘com.android.tools.build:gradle:3.6.3’
“`
Android Gradle Plugin(以後、AGP)のバージョンを上記にあげるとアプリ起動時に常にクラッシュするようになった。
クラッシュの内容は下記(長いので一部のみ)

“`
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/R$string;
at com.google.android.gms.common.internal.StringResourceValueReader.(Unknown Source:4)
at com.google.firebase.FirebaseOptions.fromResource(com.google.fi

元記事を表示

Room を使ってローカル DB を扱う際の基本と tips

モダンな Android アプリケーション開発を勉強しようの回、続いては SQL ライブラリの Room を使いました。
アノテーションを用いてシンプルにローカル DB を扱う事ができる優秀なライブラリなので今後のアプリ開発では積極的に使っていきたいと思います。

(RxJava + Realm に疲れてきたところだったのでこういうシンプルさに涙が出ます?)

まずは基本的な使い方から、少し踏み込んだところまで纏めたいと思います。

## Environment

まずはライブラリの導入です。動作環境は以下。

– Android Studio: 3.6
– Kotlin: 1.3.61
– Android: 9.0

また、Room の組み込みは以下になります。

“`app/build.gradle
dependencies {
def version = “2.2.5”
implementation “androidx.room:room-runtime:$version”
kapt “androidx.room:room-compiler:$ve

元記事を表示

AdMobをAndroidに組み込んでみよう(Video広告編)

AdMobをAndroifに組み込んでみようという事で覚書

「AdMobをAndroidに組み込んでみよう(環境設定編)」の続きです。
https://qiita.com/sanoh/items/79d04b021d18bdff0e06
■Step1.画面レイアウトを設定しよう

・activity_main.xmlをひらき「Button」を作成、名前を「mMyButton」とします。(レイアウトエディタの使い方は省きます)![2020-06-16 (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/75b8cf8e-e95f-6acb-267e-21fb76ba99db.png)
ボタンの配置はこのようにしておくとよいでしょう
![2020-06-16 (19).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/c5a84ed3-0dc6-3e9f-2462-4bbf536b6b4a

元記事を表示

AdMobをAndroidに組み込んでみよう(全画面広告編)

AdMobをAndroifに組み込んでみようという事で覚書

「AdMobをAndroidに組み込んでみよう(環境設定編)」の続きです。
https://qiita.com/sanoh/items/79d04b021d18bdff0e06
■Step1.画面レイアウトを設定しよう

・activity_main.xmlをひらき「Button」を作成、名前を「mMyButton」とします。(レイアウトエディタの使い方は省きます)
![2020-06-16 (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/83cbb370-9d9c-d9ac-17b6-8d09d58576b7.png)
ボタンの配置はこのようにしておくとよいでしょう
![2020-06-16 (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/6e23624b-e439-2b80-f86a-07d5350e233

元記事を表示

AdMobをAndroidに組み込んでみよう(バナー広告編)

AdMobをAndroifに組み込んでみようという事で覚書

「AdMobをAndroidに組み込んでみよう(環境設定編)」の続きです。
https://qiita.com/sanoh/items/79d04b021d18bdff0e06
■Step1.画面のレイアウトを設定しよう

・activity_main.xmlを編集します。
 (最初画面は「Design」モードなので「Code」モードで編集してください)

“`text:
androidx.constraintlayout.widget.ConstraintLayout
“`

“`text:
RelativeLayout
“`
に変更した後にバナーを表示するタグを追加します。(ca-app-pub-***はデモ用なので本番は登録したものを)

“`text:
AdMobをAndroidに組み込んでみよう(環境設定編)

AdMobをAndroidに組み込んでみようという事で覚書
元にした内容
https://developers.google.com/admob/android/quick-start#kotlin
■Step1.プロジェクト作成

・プロジェクトを作成する場合
今回はAndroidなので「Phone and Tablet」を選択し
「Empty Activity」を選択後「Next」で次の画面に移ります。
![2020-06-16 (0).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/574749c1-16b4-41ab-6c29-f787b5b7ba83.png)
今回はNameを借りに「AdMob01」とします。
開発言語は「Kotlin」を選択してください。
![2020-06-16 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122121/4cbf8ada-f108-58af-03

元記事を表示

Apple iPhone と Google Pixel の解像度 (dp) メモ

# iPhone (iOS)

320px 端末そろそろ切られそうっすね (元祖 SE は 2016 年発売だし)

Apple iPhone

# Pixel (Android)

アップデートで数十 dp づつ伸びる Pixel くん

Google Pixel

# 解像度

| 端末 | 解像度 |
|:–|:–:|
| iPhone 11 Pro Max/XS Max/11/XR | 414×896 |
| iPhone 11 Pro/X

元記事を表示

こんなソースコードはイヤだ-openなクラスとabstractなクラス

プログラムのソースコードのより良い書き方をまとめていこうと思います。

# openなクラスとabstractなクラス

“`sample.kt
open class UserAdapter() {
//継承先で定義する
open fun onClickedCell(user: User) {}

//セルをクリックした時のイベント
private fun onClicked() {
onClickedCell(user)
}
}
“`

[どのようにリファクタリングできるのか](https://www.sentohsharyoga.com/ja/bad_source_code/entry/open_class_and_abstract_class)

元記事を表示

Androidの全アプリのパッケージ名を取得する

端末にインストールされてるアプリのパッケージ名をアプリ内のコードで取得する。

## 公式ドキュメント
https://developer.android.com/reference/android/content/pm/PackageManager#getInstalledPackages(int)

`PackageManager#getInstalledPackages`を使えばいいらしい。

## コード

“`kotlin
val flag: Int = PackageManager.GET_META_DATA // ここに条件を指定するフラグを設定
// 全パッケージ取得(システムアプリ含む)
val packages: List = context.packageManager.getInstalledPackages(flag)
// パッケージ名だけに絞る
val packageNames: List = packages.map { it.packageName }
// 取得したらあとはご自由に
packageName

元記事を表示

スクリーンリーダーを使ってのVisual Studio CodeおよびAndroid StudioでのAndroidアプリ開発_Flutter編

コマンドとメモ帳でも開発はできますが、コードエディタを使うほうが何かと便利です。
[NVDA](https://www.nvda.jp/) でも表題のエディタが使用できるので、私のメモを兼ねて投稿します。
—-

## 準備
それぞれ下記を参考に設定をします。
[WindowsでFlutter入門(開発環境構築~デバッグ実行まで) │ Web備忘録](https://webbibouroku.com/Blog/Article/flutter-win)
[Visual Studio Codeで日本語化する方法[Windows] – Qiita](https://qiita.com/nanamesincos/items/5c48ff88a4eeef0a8631)
Visual Studio Codeで拡張機能を検索するときには
コントロール+シフト+X
からすることができます。

## Visual Studio Code について
ファイルを編集して保存をするだけでホットリロードされます。
パッケージのインストールもコマンドなしでファイルに書き込んで保存でOKです。

### 基

元記事を表示

OTHERカテゴリの最新記事