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

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

AndroidでDividerを描画する方法

## これは何

アンドロイドアプリを開発している際、任意の場所に区切り線を描画したいことがあるかと思います。
区切り線の描画方法について検索しても、情報が乱立していてどれが正しいのか分からなかったのですが、おそらく正解であろう方法を見つけたのでまとめました。

## dividerを設定する方法

答えはこちらのデモアプリにありました。

[Material Components Catalog App](https://github.com/material-components/material-components-android)

以下のxml要素をdivierを描画したいところに設定するだけです。

“`xml:layout.xml


Androidでカレンダーのレイアウトを全力で自作する

## 概要
前回は曜日の部分だけ作ったので、今回は日付の部分を作っていきたいと思います。

## 全力で自作

“`activity_main.xml

元記事を表示

[Modern Android] Jetpack Compose その1

モダーン アンドロイド
Jetpack Composeを試してみたい

その過程をメモします。

まず、メモしている時点では、開発者PreviewなのでStableチャンネルでは
利用できない。

# 設置する。

https://developer.android.com/studio/preview

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137182/e68b50b9-176e-6da3-2ab5-c5b3f3b5e786.png)

ZipFileでダウンロードして、圧縮されたデータを元に戻もどす。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137182/e351047b-d06e-ec7b-eb13-50ae07bb40d6.png)

Nextを押します。
![image.png](https://qiita-image-store.s3.ap-northeast

元記事を表示

Unity-Androidアプリから明示的インテントで他のアプリを起動する

#Unity-Androidアプリから他のアプリを起動する

unityで作ったandroidアプリから
他のアプリを起動したかったから調べたら
URLスキーマを使うものしか見つからなかったので
明示的インテントで起動できるようにした。

##概要
1.Unityクラスの取得
2.アプリのアクティビティ取得
3.インテントに明示的にアプリパッケージ名とアクティビティの指定
4.起動
**※manifest.xmlの編集が必要かもしれない。確認中。**

“`c#:startActivity.cs
string PackageName = com.campany.example;//パッケージ名
string MainActivity = “.MainActivity”;//スタートアクティビティ(ドット必要)

AndroidJavaClass UnityPlayer = new AndroidJavaClass(“com.unity3d.player.UnityPlayer”);
AndroidJavaObject Activity = UnityPlayer.GetStatic<

元記事を表示

android:backgroundで躓いた話

普段何気なく使っていた、`android:background`で少し躓いたので、その解決策を記録に残します。

# 何が起こったか
“`activity_main.xml




“`

“`MainActivity.kt
class MainActivity : AppComp

元記事を表示

Play Install Referrer Libraryを導入する

Googleさんがインストールリファラ・ブロードキャストをやめてしまったので、ライブラリを導入することになりました。
当時の導入時のメモです。

—-
まずはライブラリ導入

“`
dependencies {

implementation ‘com.android.installreferrer:installreferrer:1.1’
}
“`

実装します。
Android Developerでは、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303516/30601f8e-13b4-ebc9-5f7f-a40b5654463a.png)
と、さらっとかいてあります。
これくらいケアしてくれよ!っと、若干イラっとしますがぐっとこらえて。
APIからのレスポンス受信後、SharedPreferenceで「処理済み」フラグを保存します。

“`java
public void handleGooglePlayReferrer(Cont

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事