くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Android

Android の Layout XML の <merge> タグについて

Android の layout ファイルでは <merge></merge> というタグを使うことができます。 この記事ではそのタグの使い方について書いていきたいと思います。 どのように使うのか レイアウトファイルのルートタグとして <merge></merge> を設置します。 そのタグの中に任意のタグを配置して使い…

Android での Wireless Debugging のやり方について

導入 Android 11 から Wireless Debugging が導入されました。 Android 11 以前のAndroid 端末でもできてはいたようですが Android 11 からは専用のUIが Developer option に実装され、かつ adb からも使いやすいコマンドが使えるようになったという認識をし…

WindowInsets を利用してキーボードを表示・非表示にしたり表示状態を取得したり

前提条件 Android 11 以降 何をするのか WindowInsets に追加された機能を組み合わせることでキーボードを表示・非表示にしたり現在の表示状態をコントロールして遊べそうだったので検証してみた記事です。 ソースコード 今回遊んだコードはこんな感じです。…

Android 11 でカスタムToast が非推奨になるようです。

Android 11 から カスタムToast が非推奨になるようです。 カスタムToast とは 一般的な Toast はテキストが画面の下部に一定時間表示されてユーザーに通知を送ることができる機能です。 by https://developer.android.com/guide/topics/ui/notifiers/toasts…

ContextThemeWrapper について

ContextThemeWrapperとは 任意のContextのThemeを上書きしたContextを作成することができるものです。 何ができるのか Viewの作成などを行う場合にContextThemeWrapper を使い作成したContextを渡すことで作成時点に指定した任意のThemeを利用してViewを作る…

Spek 2.0 で Data-Driven test はサポートされてないらしい

github.com 普通のKotlin のコードで表現してねって感じらしい.

ViewGroup で ダブルタップを検知するには

導入 ViewGroup 全体でダブルタップを検知したいときありますよね?そんな時の解決方法です。 前提条件 Android アプリ ViewGroup 内でダブルタップされたら検知したい 提案手法 対象となるViewGroup に GestureDelector をセットして監視する。 手順 検知し…

ViewPager2 を使っているときにスワイプを一時的に向こうにしたい。

ViewPager2 を使って開発をしているときにスワイプされたくない時があると思います。 ただ、xmlから向こうにすると任意のタイミングでスワイプできるかの管理をできなくなります。 そのため、今回のような記事のことが必要になります。 結論 ViewPage2に生え…

Tensorflow の Android Sample をビルドしようとするFill class が見つからないエラーを解消する

tensorflow に付属しているサンプルを実行しようとすると以下のようなエラーが発生することがあります。 今回は、それを解決したいと思います。 クラス Zerosで宣言されているTはObjectを拡張します /Users/kuxu/.ghq/github.com/tensorflow/tensorflow/tens…

setting.gradle に追記することで特定のフォルダに入っているmoduleを一括でターゲットにする様にした

Gradle 芸でモジュール数が増えても記述が多くならない様にして見ました。 feature/data の名前でモジュールをフォルダ分けしてたりするので複数のフォルダを見たいときでもいい感じになる様にしてみました。 ['feature', "data"] .asList() .each { folderN…

Fragment で Snackbar を表示させるHelperメソッドを書いた。

暗記とか苦手なので書く。 重要なのは、 android.R.id.content で Activity の乗ってる View を取ってきてそこに表示してる fun Fragment.showSnackbar( text: String, @BaseTransientBottomBar.Duration length: Int = Snackbar.LENGTH_SHORT ) { Snackbar.…

Gson で List<*> なクラスをJsonからパースするときにシュッと処理してくれる拡張関数を書いた。

ソリューションはあるけど、拡張関数でシュッと解決してくれるものがググっても出てこなかったので書きました。 ソースコード inline fun <reified T> Gson.fromJson( json: String ): T { return this.fromJson( json, object : TypeToken<T>() {}.type ) } 一番シュッと</t></reified>…

横に長くて解像度の良いディスプレイを買った。MacBook Pro の外部ディスプレイとして使ってます。 LCD-GCWQ341XDB

横に長くて解像度の良いディスプレイを書いました。 買ったやつの特徴 横に広い 解像度が高い USB-C に対応してる HDMI に対応してる リモコン付き Amazonで翌日に届く 一応、ゲーミングとか色がなんちゃらとか書いてありますが興味なのでどうでもいいです。…

Android アプリでOS組み込みの音声合成エンジンを使ってTextToSpeechを行う

この前ハッカソンで Android アプリでOS組み込みの音声合成エンジンを使って TextToSpeechを実装してたのでその時の知見を共有します。 実装方法 1. AndroidFramework に含まれている TextToSpeech Class を利用するだけです。 developer.android.com 2. ラ…

Android 10 から導入された Settings Panels を使ってみた。仕組みも少し見てみた。

Android 10 から設定画面をユーザーアプリが起動しているときに画面を遷移せずに表示することができるようになっています。 今回はこちらようにアプリ内に設定画面の一部を表示してみたいと思います。 ここでは、設定アプリの一部を表示と書きましたが、正確…

Android 端末で Suica に触れたときにアプリが起動してUIDを読み取れるようにする

この記事を開いた皆さんは、タイトルのように Android 端末で Suica に触れたときにアプリが起動してUIDを読み取ろうとしている奇特な人だと思います。 NfcAdapter と言うクラスを利用することであれこれをお任せすることができます。 ここで重要になってく…

Gradle Custom Task with kotlin を実行するときに 引数を渡したり実行結果を読み取る。

Gradle Task に引数を渡す Gradle Task を実行するときに引数を渡したいときがあると思います。 build.gradle内で完結している場合には、以下のように lateinit var な変数を定義すれば値を渡すことができます。 lateinit var userName: String さて、build.…

adb shell からURlを指定してIntentを飛ばす

am コマンドの -d オプションで指定すれば行けそう am start -a android.intent.action.VIEW -d "https://google.com"

RecyclerView.ListAdapter でアイテム挿入後に何かしたい!非同期辛い!

RecyclerView を使って何かする時に ListAdapter を使ってますか? DIFFUtil を使うときに合わせて使うことが多いかなと思います。 問題点 submitList しても非同期で挿入されるため、 SubmitList() した直後にRecyclerView(Adapter) に対してあれこれすると…

LiveData-Kotlin Extension を試してみた

基本的には、 Transformations の拡張関数の集合です。 implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.1.0-alpha04" class MainActivityViewModel : ViewModel() { private val source1LiveData = Source1Livedata() // 同じものが流れてき…

Android Architecture Components 勉強会 #5 に参加してきた。

せっかく東京にいるので、ということで AAC の勉強会に参加してきました。 Google で開催されてました。 GDE な人がたくさんいており技術難易度も結構高めだった気がします。 感想 めちゃめちゃ勉強になりました。 AAC は普段使っていてノリで色々しているの…

Gradle 公式が出している kotlin-dsl のサンプル集リポジトリが良さそう

Kotlin-DSL を書こうとしていて色々つまづくことがあります。そんな時に参考にすると良さそうなリポジトリ。 プレーンなやつからBuildSrc を利用したりするやつまである程度揃ってる。 github.com

Spek/Kotlin を使っている時に LiveData を利用した Unit Test を記述する

Live Data を使ったコードのテストを記述する場合にはメインスレッドで実行しなければいけない Live data をUnit Test であれこれする時には、 MainThread で実行しなければいけないという制限が問題になります。 具体的には、 LiveData の setValue メソッ…

kotlin で lambda 関数の呼び出しログと回数を記録できる便利クラスを作ってみた。

Unit Test 等で lambda 関数 を使用しているところで呼び出しログと呼び出し回数を記録したいことはたまによくあると思います。 そこで、記録できる便利クラスを書いてみました。 機能 呼び出しログの記録 回数の記録と検証(指定された回数呼び出されてなか…

Android でプログレスリングを表示する方法。

そういえば、毎回ググってたなぁと思って書いた。 覚えるほどではないのに使うんですよね。。 <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" style="?android:attr/progressBarStyleLarge" /></progressbar>

Chrome Custom Tabs の Pre Fetch を Kotlin っぽく書いてみた。

Chrome Custom Tabs には Pre Fetch という機能が存在します。 これは、 Chrome Custom Tabs でウェブページを表示する前に事前に読み込んでおくことで表示速度の最適化を行える機能です。 自前実装しようとすると大変なこの機能ですが、 Google Chrome の機…

ChromeCustomTabs の Androidx パッケージ

ChromeCustomTabs を使うときに必要になるパッケージ名が Androidx では変更されていたため記事にします。 具体的には、以下のパッケージになっているようです。 implementation "androidx.browser:browser:1.0.0" 以下にパッケージの詳細が書いてあります。…

Android でタップしたときにリップルエフェクトを設定する方法

ForeGround に以下の属性を適用させるとできます。 android:foreground="?android:attr/selectableItemBackground"

しがない大学生が #Droidkaigi に初参加してみた。

体調崩して投稿が遅れてしまいました/// DroidKaigi とは 02/7-02/8 に 新宿で開催された Android App Developer のためのカンファレンスです。 前日に shibuya.spk とかも開催されてたので前日に参加してたりしました。 参加した理由 Android アプリ開発の…

Android アプリのパッケージ依存管理と大変だったところ。

導入 Android アプリ開発をしていると各Module ごとに依存しているライブラリのバージョンや種類がバラバラになって後で苦労することは多々あると思います。 私の認識では、依存するライブラリを集中管理するためのテクニック。について書きます。 英語でグ…