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

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

【Android9.0 Pie Java】チャットアプリで横スワイプ→ダイアログ表示→削除を実装する

## 環境
Android9.0 Pie Java

## はじめに
最近Android Javaでチャットアプリを作成していまして、LINE風のチャット一覧削除を実装しました。
RecyclerViewのリスト表示と削除機能の記事は結構ありますが、

`横スワイプ→ダイアログ表示→削除
MainActivity + 複数のFragment構成`

の実装例は日本語の記事では見つからなかったので共有させて頂きます。
(ベストプラクティスかは怪しいので参考程度にお願いします。。ご指摘大歓迎です!)

こんな実装ができます
![243e5a5ccb079ad0d385004d69a930ba.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285286/3f39bf3a-7993-5e79-1c9c-6af03bf1d8f4.gif)

## 完成品URL
非常にコンテンツが長いので、完成品を取り合えず手に入れたい方はこちらからどうぞ。
https://github.com/yuta-matsumoto/

元記事を表示

[Android] Waiting For Debuggerが終わらない時の打開策?

困って調べたのでメモ代わりに載せます

# 何のこと?
デバッグ中に起こる

“`
Waiting For Debugger
Application is waiting for the debugger to attach.
“`

このダイアログがいつまでも消えない問題。

# 解決方法

エミュレーター側で、

1. Settings(設定) -> About emulated device(エミュレートされたデバイスについて) -> Build number(ビルド番号) を7回タップ →Developer options(開発者向けオプション)が有効になる
2. Settings(設定) -> System(システム) -> Advanced(詳細設定) -> Developer options(開発者向けオプション)

元記事を表示

MacでゼロからのFlutter環境構築

ゼロからFlutterの開発環境を構築するには以下の3つの手順が必要です。

1. Flutterを導入する
2. Xcodeを設定する
3. Android Studioを設定する

# Flutterを導入する
#### Flutterのインストール
[Flutter公式](https://flutter.dev/docs/get-started/install/macos)からインストーラーをダウンロードします。
ダウンロードした`zip`を解答して、`flutter`フォルダを任意の場所に置いてください。
私はアプリケーション直下に配置しました。

#### コマンドの有効化
– flutterフォルダの中にある`flutter_console.bat`を実行します。
これでFlutter Consoleからflutterコマンドが使えるようになります。

#### Pathを通す
`~/.bashrc`または`~/.bash_profile`に以下を記述する。

“`console
$ export PATH=$PATH:/Applications/flutter/bin

元記事を表示

Android + kotlin + ViewPager2 でカレンダーの横スクロールを実現する

## 概要
今回は前回作った6月のカレンダーをスクロールして、7,8月のカレンダーも見れるようにしたいと思います。

## 技術テーマ
* ViewPager2

横スクロールにはViewPagerは避けては通れないのでそちらを使って実装していこうと思います。

## 手順
### Fragmentの作成
ViewPagerではスクロールすることでfragmentが切り替わるというものなので、今までActivityしか使ってなかったのですが、メインの処理をFragmentに移行したいと思います。

“`fragment_calendar.xml

元記事を表示

【R8/ProGuard】マージ後のProGuardルールファイルを確認する方法

[ライブラリ モジュールの開発に関する考慮事項](https://developer.android.com/studio/projects/android-library?hl=ja#Considerations) の **ライブラリ モジュールには独自の ProGuard 構成ファイルを含めることができる** に記載がある通り、ライブラリ側がProGuardルールファイルを内包している場合があります。( `consumerProguardFiles` )

そういうライブラリを使っている場合、最終的に生成されるProGuardルールファイルは、それぞれのProGuardルールファイルがマージされたものになります。

今回は、そのマージされたProGuardルールファイルを確認する方法を記載します。

# `printconfiguration` を使う:bulb:

方法は簡単で、アプリ側で使っている `proguard-rules.pro` に

“`
-printconfiguration proguard-rules-full.pro
“`

と記述し、 `minifyE

元記事を表示

[Modern Android] Jetpack Compose その4

JetNewを続いて見ながら、
Jetpack Composeを理解しようと思います。

出来ればFlutterと比べながらみようと思います。

# 今日は

まず、DrawerButtonとtopAppBarを見てみます。

# DrawerButton

* DrawerButtonはAppDrawerのComposable関数の中で使われている。
* DrawerButtonはicon、label、isSelected、actionmodifierをパラメータとしている

“`kotlin
@Composable
private fun DrawerButton(
icon: VectorAsset,
label: String,
isSelected: Boolean,
action: () -> Unit,
modifier: Modifier = Modifier
) {
val colors = MaterialTheme.colors
val imageAlpha = if (isSelected) {

元記事を表示

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.

元記事を表示

OTHERカテゴリの最新記事