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

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

Flutterの始め方

初めに
===
AndroidのアプリエンジニアがFlutterで開発を始めるためのセットアップをまとめました。
AndroidのアプリエンジニアがFlutterを始めるまでなので、Android Studioは既にインストール済みであることを前提とします。
[公式](https://flutter.dev/docs/get-started/editor)

環境
===
PC:Windows 10
Android Studio:3.5

1.Android Studio
===
1-1.Android Studioのアップデート

Android StudioでのFlutter開発環境の構築
FlutterのサポートがAndroid StudioのVersion:3.6以上なので、アップデートしていきます

[Events]

元記事を表示

Android + kotlin + databindingでカレンダーを自作する【日付設定編】

## 概要
前回なんとなくいい感じにレイアウトは作成できたので、今回は日付の部分を手作業で入れていた箇所を動的に入れられるようにしたいと思います。

## 目標
カレンダーの日付をデータバインディングを用いてアクティビティから動的に設定する

## 手順
### Activityからレイアウトの値を変更する

まずは最小限のActivity→レイアウト変更を書きます。

“`MainActivity.kt
package com.example.myfavoritecontentsmanage

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import com.example.myfavoritecontentsmanage.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

privat

元記事を表示

ActivityResultContractとViewModelを使ってFirebase Auth×Googleログインをスッキリ書く

## はじめに
AACのViewModelを用いた場合、onActivityResultが絡んだコードを書くときに辛みが発生していましたが、[前回の記事](https://qiita.com/masaibar/items/0cd52d017119171b1ed9)を基に、Firebase AuthでのGoogleログインの処理を書いてみたら思いの外スッキリしたので記録を残しておきます。
なお、本記事ではFirebase Auth×Googleログインに関する基本的な解説はしません。

全体のソースコードはこちらです:https://github.com/masaibar/SimpleGoogleLogin

## 実装
詳細な差分は[こちら](https://github.com/masaibar/SimpleGoogleLogin/pull/1)を御覧ください。

### app/build.gradle
安定版である1.1.0には`ActivityResultContract`が含まれていないので注意して下さい。

“`gradle:app/build.gradle
i

元記事を表示

Flutter歴1ヶ月がオンラインハッカソンで初心者チームのTech Leadをしてみた

# はじめに

1ヶ月前のGWにもハッカソンに出場し、そこで初めてFlutterを触り5日間でアプリを開発しました。

そのときの記事はこちらです
[Flutter初見が5日間のハッカソンでアプリ開発してきた](https://qiita.com/hohohoris/items/dd0df09c5b0aeb3d87da)

今回は1週間でサービスを作るハッカソンを企画/開催したためその概要と、Flutter初心者チームでTech Lead(笑)な役割をし、メンバーを牽引した軌跡を残せれば良いと思いこの記事を書いています。

# CA21Hackathon

## 目的

今回のハッカソンは

[CyberAgent](https://www.cyberagent.co.jp/)の21卒内定者エンジニアでのハッカソンです。

このハッカソンを開催した目的は2つあります。

– 同期理解のため
– 同期間での技術知見共有

このハッカソンは、内定者数人で週に1度zoomで集まりミーティングを行い

– そもそもどんなイベントを開催するか
– ハッカソンを開催する目的/ テーマ
– 開催

元記事を表示

Dagger2 – Android Dependency Injection

#DIとは
Dipendency Injection(DI)、「オブジェクトの注入」のこと。

要するに、依存性を自由に差し替えれるようにすることで、テストを実行しやすくしたり(モックを差し込む)、オブジェクトをそれぞれ管理できるようになる。

#AndroidにおけるDIの必要性
例えば、SharedPreferencesにデータを保存したい場合、DIなしで実行すると、SharedPreferencesからデータをインスタンス化、保存、取得することになり、すべてアクティビティに似たような記述をしなければならない。
スクリーンショット 2020-06-24 15.34.25.png

この方法でアプリが大きくなると、最悪の場合改修不可能になる可能性がある。

なのでSharedPreferencesを毎回アクティビ

元記事を表示

【Android】タップされた座標にあるビューが知りたい

**ソース**

“`kotlin
class MainActivity : Activity() {

private var views = mutableSetOf()
private var debugCount = 0

@SuppressLint(“ClickableViewAccessibility”)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// タップ時に判定したいViewを詰める
views.add(findViewById(R.id.redView))
views.add(findViewById(R.id.purpleView))
views.add(findViewById(R.id.greenView))

元記事を表示

Androidでカレンダーを自作する【背景色編】

## 概要
前回カレンダーっぽくするために枠線を入れたのですが、今回はそれに加えて土日の色を少し変えていきたいと思います。

## やること
* 土曜の色を青に
* 日曜の色を赤に

## いざ、着色

実は昨日の枠線をつける段階で背景色の設定方法も調べはついていたのでそれを黙々と組み込みます。

前回のflame_style.xmlとは別にflame_style_red.xmlとflame_style_blue.xmlを用意します。
そしてそれそれに赤と青のスタイルを記述して設定するだけです。
(ホントはflame_style.xmlの中に書きたかったがレイアウトでの指定方法がわからんかった….)

“`flame_style_red.xml


元記事を表示

[Modern Android] Jetpack Compose その3

JetNewsのサンプルコード見ながら、
Jetpack Composeについて、理解や分析のメモです。
Flutterと似ているので、比べてながらメモします。

# Theme

* theme PackageのTheme.ktを見るとこんな感じ。
* lightColorPaletteとdarkColorPaletteの関数はなんだろう?
* https://material.io/design/color/the-color-system.html#color-theme-creation

“`kotlin

private val LightThemeColors = lightColorPalette(
primary = Red700,
primaryVariant = Red900,
onPrimary = Color.White,
secondary = Red700,
secondaryVariant = Red900,
onSecondary = Color.White,
error = Red800
)

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事