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

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

Androidでカレンダーを自作する【枠線編】

## 概要
前回のでレイアウトの枠組みはできたのでよりアプリのカレンダーっぽく寄せていきたいと思います。

**前回の成果物**
スクリーンショット 2020-06-22 1.46.48.png

## 今回やること
枠線をつける

## 枠線をつける

枠線をつけるためにはstyleの定義が必要なようで、今回は新しくファイルを定義します。
drawable/flame_style.xmlとします。(どこかの記事で読んだので…)

“`xml

元記事を表示

Unityからjar経由でAndroidの機能を呼ぼうとしたらNoClassDefFoundErrorが発生した

そもそもjarを呼ぶところまではここを参照した

呼ばれるjavaメソッド内で端末のセンサー関連機能を呼び出そうとしたところ、
NoClassDefFoundError が発生した
どうやらandroid contextをメソッド内で使おうとするとクラス自体を見失うよう。

android contextをUnityからjavaに送る方法を見つけ、呼び出しに成功した。
https://www.itread01.com/content/1546405986.html

Unity:

AndroidJavaClass androidJavaClass = new AndroidJavaClass(“com.unity3d.player.UnityPlayer”);
AndroidJavaObject activity = androidJavaClass.GetStatic(“curren

元記事を表示

初心者が流し読みで理解できるAndroidアプリのDI(勉強会資料)

# DIとは
**Dependency Injection**の略。日本語で「依存性の注入」

コンポーネント間の依存関係を外部から注入するデザインパターン(と言う一文は理解できなくてOK)

## DIしたいアプリの例
`UrlProvider`は、通信先URLを生成するクラス
![DI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/277107/8c128d42-7f46-4ea7-9b05-450e5840ad98.png)
3つのクラスが`UrlProvider`を使っている

1. `WebView` URLをアプリ内部で表示する
1. `OpenBrowser` URLをアプリ外部のブラウザで表示する
1. `HttpClient` URLとバックグラウンドで通信する

### 実装はこんな感じ(関係ない部分は省略)

“`kotlin
class WebView {
private val urlProvider = UrlProvider()
・・・

元記事を表示

Android + ConstraintLayout + Guidelineでカレンダーのレイアウトを作成する

## 概要
昨日力技でカレンダーを作成したのですが、テキストの位置を変えたり、枠線を加えようとしたら全然うまく行かず、そもそも作成方法があんまり良くなかったのではないか?と思って調べてみたところGuidelineという神ツールがあることを知ったのでそちらを使って作成し直すことにしました。

**超絶本当に最高になった記事**
https://qiita.com/devnokiyo/items/59d72bf285ee378ef637

## ガイドラインを作成

まず縦横それぞれのマス目の割合を定義したGuidelineを定義します。

“`xml

元記事を表示

AndroidのWebView#shouldInterceptRequestでリクエストをinterceptするときに忘れがちなこと

AndroidのWebViewでHTTPレスポンスのハンドリングやタイムアウトを独自に実装したいときに、shouldInterceptRequestをオーバーライドして、独自にHTTP通信を実装することがありますよね。

サンプルなので大雑把な実装ですが、例えば以下のような感じに実装したとしましょう。

“`Kotlin
override fun shouldInterceptRequest(view: WebView?, request: WebResourceRequest?): WebResourceResponse? {
val latch = CountDownLatch(1)
var res: InputStream? = null

val call = createOkHttpClient().newCall(Request.Builder().url(request?.url.toString()).method(“POST”, RequestBody.create(null, “hoge”)).build())
call.enque

元記事を表示

[Modern Android] Jetpack Compose その2

Composeのサンプルコードを見ながら、分析しようと思います。
JetNewというComposeのサンプルを見つけました。

#はじめる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137182/aad648ce-8be7-22f3-1804-d00ae5686803.png)

https://github.com/android/compose-samples/tree/master/JetNews

# Readmeを読む

>Jetnews is a sample news reading app, built with Jetpack Compose. The goal of the sample is to showcase the current UI capabilities of Compose.
To try out this sample app, you need to use the Canary version of Android Studio 4.

元記事を表示

初めてのEpoxy

入社して3ヶ月経ちそうですが、まだEpoxyを触ったことなかったので備忘録として書いていきます。
Epoxyを使うとRecyclerViewを簡単に実装できるみたいです!(中毒性があるので注意らしい)

# 実装
##Gradle
まずはEpoxyを使うためにGradleに依存関係を記述します。

“`build.gradle
def epoxy_version = “3.11.0”
implementation “com.airbnb.android:epoxy:$epoxy_version”
// databinding使用するなら
implementation “com.airbnb.android:epoxy-databinding:${epoxy_version}”
kapt “com.airbnb.android:epoxy-processor:$epoxy_version”
“`

## package-info
gradleに依存関係を記述したら、`package-info.java`ファイルをプロジェクト内に作成します。

元記事を表示

【Android】MergeAdapterを使ってBanner + GridItemのパターンを実装する

## 概要

巷によくあるアプリのパターンとして、画面の上に横長のバナーやレイアウトを置いて、その下に格子状のレイアウトを置くというものがあります。

SmartNews

グノシー

このデザインに対応するためのよくある実装として、一つのRecylerAdapterで、ViewHolderを複数用意して、item毎にViewHolderを切り替えるといったものがあります。
しかし、ロジックが複雑化するので、実装コストや後のメンテナンスコストが増えてしまう原因でもありま

元記事を表示

Espresso入門

# はじめに
AndroidでUIテストをするためには何を使うのが良いか調べて見たところ、
単一のアプリのUIテスト方法として [Espresso](https://developer.android.com/training/testing/espresso)がDeveloperGuideでも紹介されていたので、試してみました。
# 導入〜テスト作成まで
AndroidStudioで簡単なプログラムを作成して、それに対するUIテストを書いてみました。

が、~~面倒くさそう~~難しそうなので、書くのは大変そうですね…

いい方法がないか調べていると、DeveloperGuideにもこんなページが..

**[Espresso テスト レコーダーで UI テストを作成する](https://developer.android.com/studio/test/espresso-test-recorder?hl=ja)**

この方法が使えるならと..試しみました。。

SampleにAndroidStudioのプロジェクト作成で一発で作成できるLoginActivityを..

元記事を表示

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

  • OTHERカテゴリの最新記事