Android関連のことを調べてみた2021年03月17日

Android関連のことを調べてみた2021年03月17日

DataBindingのバインディング式でsealed classを使う

バインディング式で`sealed class`を使う方法です。

`sealed class`は、[アプリ アーキテクチャ ガイド](https://developer.android.com/jetpack/guide#addendum) で紹介されている`Resource`を使います。

# `instanceof`を使う

`==`を使いたくなってしまうところですが、`instanceof`を使います。

“`xml
android:visibility=”@{viewModel.resource instanceof Resource.Success ? View.VISIBLE : View.GONE}”
“`

ちなみに上記の実装は「データの取得に成功したらウィジェットを表示」「データ取得中・エラーが発生したら表示しない」という実装です。

# まとめ

MVVMを使った実装例を載せておきます(どこか間違えていたら教えて下さい…)

ネットワークから記事を取得するイメージです。

![1bcb318dba24116959061a48a500e052.gif](htt

元記事を表示

【Mobile】静的セキュリティ解析ツール「MobSF」Mobile-Security-Framework-MobSFの使い方

## MobSF(Mobile-Security-Framework-MobSF)とは
[MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)は、Android/iOSのペンテスト、マルウェア解析、セキュリティ評価を自動化したオールインワンのフレームワークです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/dc8ddabc-4096-c5f7-1931-c2bc8dcd0a58.png)

静的解析と動的解析を行うことができます。MobSFは、モバイルアプリのバイナリ(APK、XAPK、IPA、APPX)とzip形式のソースコードをサポートしています。

## MobSFの導入方法
### STEP1 Dockerをインストール
[Mac に Docker Desktop をインストール](https://docs.docker.jp/docker-for-mac/install.html)

元記事を表示

レスポンスデータを加工する(拡張for文)

## はじめに
レスポンスデータって全要素使うわけではなかったり、ネスト構造になってたり、結構見にくいことが多いと思います。
ということで取得したレスポンスを加工(フィルター, マッピング, ソート)して、自分好みのデータクラスを作成してみました。

## ゴール
フィルター(抽出):likeCountが5より大きいもの
マッピング(結合):title,body,likeCount,name
ソート(並び替え):likeCountで降順

|加工前|加工後|
|—-|—-|
|![スクリーンショット 2021-03-16 22.02.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670405/f5eee0bb-25e2-cbf1-addf-6f8de6535538.png)|【Kotlin 初学者】EditTextで文字入力した後の状態を取得する

## EditText内の文字入力後の状態を把握する
使い所はX文字以上の場合は入力できません、などを表示したい場合によく使います
当たり前ですがEditTextは初期入力文字数が0なので、下記のような書き方で文字入力後の文字数を取得してあげます

“`MainActivity.kt

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

editTextSample.addTextChangedListener(object : TextWatcher {

override fun afterTextChanged(s: Editable) {}

override fun befor

元記事を表示

MVVM + DataBinding でViewModelからクリックイベントを通知する

#この記事について
MVVM + DataBindingを使用する際に、ViewModel内でクリック処理を記述することがあるかと思います。その中には画面遷移など、ViewModelからActivityもしくはFragmentへクリックイベントを通知するケースも存在します。
今回はLiveDataの状態監視を用いてクリックイベントをハンドリングしていきます。

#【NGケース】直接LiveDataで遷移状態を保持してみる

まずは悪い例から挙げてみます。
例えば、以下のように直接LiveData内で遷移信号を保持した場合

“`kotlin:FirstViewModel.kt
class FirstViewModel : ViewModel {
private val _navigateToSecond = MutableLiveData()

val navigateToSecond : LiveData
get() = _navigateToSecond

fun userClicksOnButton(

元記事を表示

Android Studio パズルアプリ制作(動画有り)

今回はパズルアプリを制作しました。
YouTubeに作っている動画をアップしています。

“`xml:strings.xml

PuzzleApp
Puzzle Game
ゲームを始める
パズルの大きさ設定
縦:
横:
整数値を入力してください

元記事を表示

[BigQuery]アプリバージョンごとのユーザー比率を取得してSlackへ通知する

Android や iOS でアプリでは何度もバージョンアップしてリリースすることが多いです。

ですのでユーザーが最新のバージョンのアプリを使っているかなど、アプリバージョンごとのユーザー比率が気になることがあるかと思います。

最近、アプリバージョンごとのユーザー比率を BigQuery から取得して Slack に通知する仕組みを実装したので、その方法についてご紹介いたします。

実際に実行してみると、以下のような感じで Slack へ通知が行われるようになります。

“`
アプリバージョンごとのユーザー比率 (2021年03月15日)

## Android

– 1.2.0 : 57.1% (4)
– 1.1.2 : 14.3% (1)
– 1.1.0 : 14.3% (1)
– 1.0.0 : 14.3% (1)

## iOS

– 1.2.0 : 54.2% (13)
– 1.1.1 : 37.5% (9)
– 1.1.0 : 4.2% (1)
– 1.0.4 : 4.2% (1)
“`

この仕組みを実装するにあたって、以下の

元記事を表示

Androidアプリ作成Tips

#はじめに
アプリ開発で忘れがちなアレコレを書いていきます。
個人的なメモとして残すので順序など適当な所も多いです。

##戻るボタンの簡単な実装
1. Buttonを配置してonClickのコールバックでfinish()を実行する。
2. AndroidManifest.xmlにandroid:parentActivityName属性を追加

“`xml:2の記入例


“`

元記事を表示

【Kotlin 初学者】画面遷移時で値を渡す方法

## 画面遷移時に値を渡す方法
EditTextなどで入力した値を別画面に渡したいなど頻繁に使われる実装になります
本当はViewBindingでid取得したかったんですが、それはまた別記事に書きますので、まずはfindViewByIdでxmlのidを取得してください?‍♂️

## イメージサンプル

## 実際のコードになります
画面遷移先をNextActivityにします
EditTextで値を入力し、Intentで画面遷移時にNextActivityで値を受け取り、
TextViewに代入してます

“`MainActivity.kt
class MainActivity : AppCompatActivity() {

override fun onCreate(savedIns

元記事を表示

【Android】ViewModel内でUiModelを使おう(その1)[sealed class編]

# はじめに
[ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel?hl=ja)は現在多くのプロジェクトで利用されているかと思いますが、LiveDataが多くなってくると管理するのが大変になってきます。最終的にはUiModelを使ってLiveDataの数を少なくし、ViewModelに関するコードをすっきりさせるのが目的です。今回は最初の段階として`sealed class`を使ってViewModelをきれいに書く方法です。

# 対象
– [ViewModel](https://developer.android.com/topic/libraries/architecture/viewmodel?hl=ja)を利用している方(MVVMのViewModelというよりはAndroidのViewModelライブラリ)
– kotlinが読める方

# LiveDataの型をどうしていますか?
例えば画面に表示する文字列をViewModelで管理する場合、下記のようにLiveDa

元記事を表示

Vysorを使ってスマホ画面をパソコン画面に表示

# Vysorを使ってスマホ画面をパソコン画面に表示

タイトルがチープにだが要はミラーリングしたい
スマホ画面をパソコン画面に表示する方法はいくつがあるがVysorを使う方法が一番簡単だった

## ダウンロード

Vysorをダウンロード、Windows、Mac両方で使うことが出来る。
Android、iOS両方に対応している。
https://www.vysor.io/

## Android接続

今回はサンプルとしてAndroid画面をパソコンに転送

先にAndroidのUSBデバッグを許可する。
https://support.vysor.io/technical/notfound/

USBデバッグを許可しAndroidとパソコンをUSB接続

Android Devicesに端末が表示される。
![スクリーンショット 2021-03-14 12.59.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59264/5d1045fa-91cf-4f03-c90d-296b648c511c

元記事を表示

BottomAppBarの左に余白が出来てしまう

`BottomAppBar`の中に`BottomNavigationView`を入れると「左に余白」が出来てしまうときの対処法です。

▼左に余白ができている

# `BottomAppBar`に`app:contentInsetStart`を設定する

`BottomAppBar`に`app:contentInsetStart=”0dp”`を設定します。

ちなみに、`app:contentInsetLeft=”0dp”`だとダメでした。

“`activity_main.xml

元記事を表示

全ステータスバーを非表示にする方法

#目的
全ステータスバーを非表示にする処理の備忘録

##参考文献
https://akira-watson.com/android/theme-notitlebar.html

元記事を表示

【Android】Viewのサイズを動的に変える時、dp指定かpx指定か忘れがち【Layout】

# はじめに

無限回忘れるから備忘録として残す。

## 結論

結論から言うと、layoutParamsをいじってViewのサイズを動的に変更する時は、**px**で指定します。

## おまけ

だけだとあまりにも味気ないので、Viewのサイズ変更に使えるコードを紹介。

### px⇆dp変換

デザイナーから提供される数値はdpだったりする。
計算してサイズを出す場合はdp/pxどちらかに合わせないといけないから、変換の処理が必要。

“`kotlin
// px→dp
fun Int.toDp(): Int = (this / Resources.getSystem().displayMetrics.density).toInt()
// dp→px
fun Int.toPx(): Int = (this * Resources.getSystem().displayMetrics.density).toInt()
“`

### 画面サイズ取得

そもそも動的にサイズを変更したい理由が**「画面サイズに応じてViewを拡縮したいから」**ってこと、多いと思う。

元記事を表示

【Kotlin初心者】intentを使って画面遷移してみた

## 画面遷移する方法

Androidアプリを作成する際に必須の画面遷移の実装についてメモを書きます。

NextActivity.ktというClassを指定してstartActivityにintentを渡してあげるだけで、
画面遷移が可能です。

“`MainActivity.kt

val intent = Intent(this, NextActivity::class.java)
startActivity(intent)

“`

元記事を表示

ビジュアルプログラミングで Androidアプリ開発ができる #Kodular を試す

## はじめに
以前、ビジュアルプログラミングを使ったスマホアプリ開発について調べていた時に見かけていた [Kodular](https://www.kodular.io/)。
![Kodular.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/dadd4ff4-e441-926c-e026-bc406ceefe7b.jpeg)
 
Qiita内でも、以下の記事を見かけてたりしました。
 ●無料ノンプログラミングAndroid開発:App Inventor から派生した AppyBuilder と Kodular 統合の行方・・・ – Qiita
  https://qiita.com/mnoda/items/ff8bc55831528010ac39

以前少し使って、最近またいろいろ試し始めた「MIT App Inventor」に関する調べものをしていたところ、この Kodular 関連の情報をまたいくつか見かけたりしたのがあり、Kodular も試しておこうと思ってやったのが今回の記事の内

元記事を表示

SeekBarをカスタマイズする

UIパーツは基本的にシステムデフォルトのものをそのまま使いたい主義者なのですが、こういうデザインにしたいと要望を受ければ頑張らねばということで、SeekBarのカスタマイズってどうやるんだけっけ、をまとめてみます。

Androidのデフォルトのシークバーは、(プロジェクトのテンプレートから作成した場合の`Theme.MaterialComponents`系テーマを使ったものの場合、以下このテーマを前提にしています)
以下のような見た目をしています。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155171/84c536ee-65d5-d23d-688c-7bab3b2e6a4a.png)

## テーマカラーの変更

単に色を変更するなら、なら`colorSecondary`で指定した色が使われるためこれで変更できます。

“`xml