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

Android関連のことを調べてみた2020年11月02日
目次

AndroidのTalkBack機能についてまとめる(基本操作について編)

# はじめに – モバイル端末のa11yについて
Webでは活発であったアクセシビリティを踏まえた開発は近年のモバイル端末の使用者増加によって、モバイル端末でも必要とされ始めています。アプリ開発者はこれを踏まえた上での開発や、開発ずみのアプリのさらなるユーザへの改善としてユーザ補助機能を高めることが必要になってきています。

今回は自学のためandroid developers documentからユーザ補助に関するドキュメントをざっと全体をみてまとめていきます。参考は最後にリンクを貼っていますので、詳しくはそちらから見てください。

# Androidで提供されているユーザ補助機能
Androidでは端末に備わっているユーザ補助機能として以下の二つが挙げられます。

TalkBack: 視力の弱いユーザーや目の不自由なユーザーをサポートします。合成音声でコンテンツを知らせ、ユーザーの操作に応じてアプリでアクションを実行します。
スイッチ アクセス: 運動障がいのあるユーザーをサポートします。インタラクティブな要素をハイライト表示し、ユーザーのボタン押下に応じてアクションを実行します。

元記事を表示

[Kotlin]toastAさんが居座ってしまいtoastBくんが呼べない方に、toastAさんに速やかに退去してもらう方法

## 状況
kotlinのネイティブアプリ開発時に、エラーがあった場合にトーストを出すという処理を書いていたのですが、トーストが固まってしまい、次の画面に遷移してもトーストが消えないという現象に陥りました。

## 原因
前のトーストが完全に消えていない状態で次のトーストが呼ばれたことで、トースト詰まりが起こってしまったようです。

## 解決方法
こんな便利なものがありました。

“`kotlin
toast.cancel()
“`

↑を追加したトーストの表示処理

“`kotlin:MainActivity.kt

private var toast: Toast? = null

fun showToast() {
if(toast != null){
toast?.cancel() // toastを表示する前に、既に表示されているtoastを消す
}

val appContext = getContext()
toast = Toast.makeText(
appContext,
R.string.toast_

元記事を表示

【Android】ScrollView がトップに戻らない

# やりたいこと

ScrollView の中に RecyclerView を入れてスクロールできるようにしている画面があります。

“`
——————–
| ScrollView |
| —————- |
| | RecyclerView | |
| | | |
“`

RecyclerView の中身はユーザーの操作によって非同期的に変更されることがあり、変更される場合はトップまでスクロールを戻したい。

【2020/11/02 追記】

コメントでご指摘いただきましたが、上記のような場合 ScrollView がなくてもスクロールが機能するので不要でした。

そのうえで RecyclerView をトップまで戻す方法は下記にあるとおり `recyclerView.scrollToPosition(0)` で OK のようです。

# 試したこと

スクロールをトップまで戻すための方法はいろいろな記事で書かれています。

よく目にするのが以下の2つ。

“`
scrollVi

元記事を表示

#31 Kotlin Koans Collections/get used to new style 解説

#1 はじめに

Kotlin公式リファレンスのKotlin Koans Collections/get used to new styleの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:fist:

#2 groupBy()/firstOrNull()

**[groupBy()](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/group-by.html#kotlin.collections$groupBy(kotlin.Array((kotlin.collections.groupBy.T)),%20kotlin.Function1((kotlin.collections.groupBy.T,%20kotlin.collections.groupBy.K)))/keySelector)**:引

元記事を表示

#30 Kotlin Koans Collections/Compound tasks 解説

#1 はじめに

Kotlin公式リファレンスのKotlin Koans Collections/Compound tasksの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:fist:

#2 count()

**[count()](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-collection/)**:引数として渡す条件式(predicate)を満たす要素の数を返す。

#3 Collections/Compound tasksの解説

[Kotlin Koans Collections/Compound tasks](https://play.kotlinlang.org/koans/Collections/Compound%20tasks/Task.kt)の解説です。
随時本サイト

元記事を表示

#29 Kotlin Koans Collections/Fold 解説

#1 はじめに

Kotlin公式リファレンスのKotlin Koans Collections/Foldの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:fist:

#2 fold()/intersect()

**[fold()](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/fold.html)**:引数としてinitialとoperationを渡し、コレクションの要素を順にoperationに適用させ戻り値として結果を返す。

kotlin koansの例を示します。

“`
listOf(1, 2, 3, 4).fold(1, {
partProduct, element ->
element * partProduct
}) == 24
“`
上の例では、引数の`1

元記事を表示

aタグ内にimgタグを配置すると、imgタグのsrcがリンク先となってしまう問題

# 問題

以下のように、aタグ内にimgタグを書くのはとても一般的かと思いますが、
Android端末でのWebViewでimgタグをタップした場合のみ、imgタグ内のsrcに飛んでしまう問題がありました。

“`


  • カテゴリー1

  • ViewModelを使ったAndroidプロジェクトセットアップのチートシート

    いつもドキュメントを探してググりまくっているので、ここにまとめる。

    ## ViewModel

    – ViewModelを使いたい
    – `val viewModel: MyViewmodel by viewModels()`を使いたい

    “`gradle
    dependencies {
    implementation ‘androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0’
    implementation ‘androidx.activity:activity-ktx:1.1.0’
    implementation ‘androidx.fragment:fragment-ktx:1.2.5’
    }
    “`

    ## Data binding

    ViewModelを使うということはたぶんData bindingも必要になると思います。

    [ドキュメント](https://developer.android.com/topic/libraries/data-binding/start)には

    “`gradle
    android {

元記事を表示

Kotlin 1.4.20-M2でDeprecatedとなったKotlin Android Extensionsを弔う

表題の通り`Kotlin 1.4.20-M2`でKotlin Android ExtensionsがDeprecatedとなりました、個人的には好きな技術だったので弔いがてら記事にしたいと思います。

## 概要
Kotlin Android Extensions[1]はKotlin用のView参照機構で、`findViewById`によるViewの参照の問題を解決するために導入された。手軽に導入できシンタックスもシンプルなので採用しているプロジェクトも多いように思うが、後述するいくつかの問題によりAndroid公式からはBest Practiceとはされていなかった。

このような背景からView参照機構として長らく`findViewById`,`ButterKnife`,`Kotlin Android Extensions`といった技術が存在する状況が続いてたが(`DataBinding`は除く)、2019年のGoogle I/OにてViewBinding[2]が発表されView参照機構のBest Practice問題は一様の収束に至った。

これを受けて昨日リリースされた`Ko

元記事を表示

#28 Kotlin Koans Collections/Partition 解説

#1 はじめに

Kotlin公式リファレンスのKotlin Koans Collections/Partitionの解説記事です。

Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。

ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**

一度各自で挑戦してから、お目通し頂ければと思います:fist:

#2 partition()

**[partition()](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/partition.html)**:コレクションの渡す引数(predicate)の戻り値がtrueをとる要素と、falseをとる要素のListの[Pair](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-pair/)を生成する(trueのListがPairクラスのプロパティfirstに、falseのListがPairクラスのプロパティsecondに代入され

元記事を表示

Google Play Storeでリジェクトされた App Rating : App is incorrectly rated as AO – Adults Only.

#初めてGoogle Playでリジェクトされた!!
![スクリーンショット 2020-10-29 18.05.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/a8d0c99f-dbbf-a071-179b-9db9f2e1e3f2.png)

アプリをアップデートするとまさかの**reject**でした。。。

#理由は?
**「コンテンツレーティングのガイドラインに違反している」**ということでした。。。

うーん。よくわからんが、意図してレーティングを「18歳以上」にしたのがよくなかったのかも。

レーティングは`アプリのコンテンツ>コンテンツのレーティング`で質問に回答することで変更できる。
![スクリーンショット 2020-10-29 18.11.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/014c5d87-2707-6db3-3f92-41e87cafffb3.png)

元記事を表示

Google Play Consoleから前のバージョンのappファイル(もしくはapk)を削除するには?

#はじめに
Google Play Consoleの画面の見方と操作方法が分からずにめっちゃ困ったお話。
新しいGoogle Play Consoleになってから、どこにどのボタンがあるか?などわからず、かなり時間を費やしてしまったのでここに記録する!

#目的
![スクリーンショット 2020-10-29 22.32.00.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/167220/dc229871-4f79-61c6-7c6c-0a1fbd797785.jpeg)
上記の一覧から「バージョンコード31と32」を削除したいのです。

**新しいGoogle Play Consoleからだと、どの画面のどこのボタンを押せば削除か?
それがなかなかわからなかった**:joy:

#背景
そもそも、「なんでアップローダしたappファイルを削除したいのか?」ということから書きていく。

###環境
ストアで公開されているアプリのバージョンは下記の通り。
・バージョンコード29
・バージョン(1.3.8)

元記事を表示

宣言的UIフレームワークでのラジオボタン(選択UI)実装方法の確認(Compose、SwiftUI、Flutter)

### 実装の狙い

![スクリーンショット 2020-10-31 19.20.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4493/ef320b61-9b18-f9b8-1aa9-ae7444502b7d.png)

上記のようにユーザーの入力などUIイベントの発生から画面の更新までを単一方向のフローで処理するための、基本的な実装についての確認です。
また、選択UIというのは非宣言的UIフレームワークにおいては、UI側に状態を持たせる実装になることが多いため、宣言的UIフレームワークにおいての実装のためのインターフェイスを確認する目的もあります。

### 今回実装したものについて

– 色の選択肢を複数の中から選択UIによって一つ選択できるようにする
– 前面の**小さな方**の四角い枠のバックグラウンドは今、選択UIで選択されている色を表示する
– その四角い枠の背面にはみ出ている**大きな方**の四角い枠のバックグラウンドには現在選択されたものより一つ前の選択されたものを表示する

以下

元記事を表示

Unity Ads でAndroidの広告を実装

今更ですが、UnityのAds でAndroid の広告を実装しました。
設定も簡単で実機の確認もすぐできました
#【Unity Ads を有効にする】

Window > General > Services を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/a7c52ec4-f81b-320a-4fc0-c0e19129d663.png)

#Ads を有効にする

Test Mode と Advanced を有効にする

実機にビルドする場合はTest Modeのチェックを外します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/771936/6dc0f783-6595-73db-5f79-bc55c0375886.png)

#【広告を表示する場所に処理を書く】

c#側で表示したい位置に下記のように処理を書きます

下記はポップアップ広告です

私の場合は表示

元記事を表示

コピペでSingle,Double and Long Press 感知 Android

@SuppressLint<("ClickableViewAccessibility") static public setClick(@NonNull Context context,@NonNull View view){ GestureDetector gestureDetector = new GestureDetector(context,new GestureDetector.SimpleOnGestureListener(){ @Override public boolean onSingleTapConfirmed(MotionEvent e) { Log.d("Click State","Single Tap"); return true; } @Override public boolean onDoubleTap(MotionEvent e) {

元記事を表示

初心者としてAndroidアプリ開発を一から学ぶ #1

一応過去に2年くらい開発していたことがあるのですが

– 7年のブランク
– 最後に触ったバージョンは Android 4.4
– AndroidStudio:インストールしたことならあるよ
– Kotlin:何それ美味しいの?

という状態で、先日AndroidStudioをインストールして、画面レイアウトすら作れず途方に暮れました…自分の経験なんて化石でしかないんやと。
正直「何となく触ればわかるだろう」と高をくくっていたのですが、Hello Worldすらできない状態なので、初心者として一から学んでいこうと化石は決心しました。

というわけで、「何かしらのプログラミング経験はあるけどAndroidワカラナイ」という状態の人間が、Android開発を学んでいく方法を探りながら書き留めていこうと思います。

## まずはDeveloperガイド
とりあえずは公式ドキュメントのデベロッパーガイドを読み進めようと思います。
(老人なので「す、すごい、日本語になっている…!」と感動しました)
[Android Develipers > ドキュメント > デベロッパーガイド](https:/

元記事を表示

[Android] Jetpack DataStoreのRead/Writeについて読んだので覚え書き

# はじめに
[Jetpack DataStore](https://developer.android.com/topic/libraries/architecture/datastore)がどうやってデータの管理をしているのかを知っておこうと思って、ちょっと[ソース](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-master-dev:datastore/)を読んでみたのでその覚え書きです。
**自身のメモ的な要素が多分に含まれております。予めご了承いただければ幸いです。**

# ソースについて
今回読んだソースコードは2020/10/30時点のものとなります。
`DataStore`は現時点ではAlphaなのですぐに実装が様変わりすることも十分あるかと思います。

また、`DataStore`には`Preferences DataStore`と`Proto DataStore`がありますが、どちらもCoreの部分は同じコードで動いていて、データの扱い方がちょっと違う(`Prefere

元記事を表示

【Android/Java】リスナ設定(ボタン設置)における記述型式を把握する

## はじめに
Androidアプリ開発で出てくる様々なListener。
javaファイルでの書き方が大きく2パターンあり、混乱したので備忘録として記しておく。

今回のサンプルはボタンを押すと、メッセージが表示されるアプリです。
※尚、ボタンはボタンでも、ActionBarにボタン(オプションメニュー)を設置する方法は全く違うのでこちらを参照してみてください。
https://qiita.com/kilalabu/items/62a39e63ee2c6d4293bd

## 用語の確認
イベント ・・・ 画面に対して行う操作のこと (例:クリックする)
イベントハンドラ ・・・ そのイベントに対して行う処理のこと (例:クリックされたらテキストを表示する)
リスナ ・・・ イベントの検知をしてくれるもの (例:ボタン)

## コード
レイアウトは適当です。

“`xml:activity_main.xml

元記事を表示

【Android】Flavor毎にアプリ名とアプリアイコンを変更する

Androidアプリ開発時に、開発環境・ステージング環境・本番環境 などの環境毎にFlavorを設定することがあるかと思います。
環境が違うアプリをひと目で見分けられるように、アプリ名とアプリアイコンを変更する方法をまとめておきます。

# Flavorを設定する

アプリの `build.gradle` にFlavorの設定を行います。
今回は例として、 `dev`(開発)・`stg`(ステージング)・`prod`(本番) の3つの環境を用意するものとします。

“`gradle:build.gradle
android {

// 省略

// ここから追加
flavorDimensions “environment”
productFlavors {
dev {
dimension “environment”
applicationIdSuffix “.dev”
versionNameSuffix “.dev”
}
stg {

元記事を表示

Androidアプリのユーザ補助機能を高める(システム ウィジェットを使用または拡張する 〜 メディア コンテンツのユーザー補助機能を強化する)

# はじめに
### モバイル端末のa11yについて
Webでは活発であったアクセシビリティを踏まえた開発は近年のモバイル端末の使用者増加によって、モバイル端末でも必要とされ始めています。アプリ開発者はこれを踏まえた上での開発や、開発ずみのアプリのさらなるユーザへの改善としてユーザ補助機能を高めることが必要になってきています。

今回は自学のためandroid developers documentからユーザ補助に関するドキュメントをざっと全体をみてまとめていきます。参考は最後にリンクを貼っていますので、詳しくはそちらから見てください。

##シリーズ
1. [前置き〜「要素にラベルを付ける」まで](https://qiita.com/airagu950/items/4407afcb89944397d2ee)
2. システムウィジェットを使用または拡張する
3. 色以外の手がかりも取り入れる
4. メディア コンテンツのユーザー補助機能を強化する
今回の記事は2〜4になります。

## 改善方法
これらの機能をアプリの中で活かすために以下の方法があると紹介されています。

– 要素

元記事を表示

OTHERカテゴリの最新記事