Scratchファイルを使って気軽に実行可能なコードを保存する

概要 この記事ではIntellijでサポートされたKotlinのScratchファイルについて紹介を行います Scratchファイル自体はKotlinに限らずJavaなどもサポートされています Scratchファイルとは Kotlinなどの実行可能なコードを保存するファイルで、デフォルトではプ…

ブログに実行可能なKotlinコードを貼り付ける

ブログなどのサイト上で実行可能なKotlinコードを表示するためのスクリプト(Kotlin Playground)がJetBrainsから公開され、 Try Kotlin や Kotlinのリファレンスにあるような機能を自分のサイトでも使うことが可能になりました。 all - Kotlin Programming La…

SequenceとList(Array)

TL;DR Sequenceは1つの値に対する操作が全て行われた後、必要なら次の値が処理される。 Listはすべての値に対して1つの操作が行われた後、必要なら次の操作が行われる Kotlinでのデータの集合 Kotlinにはデータの集合を操作するためのクラスとして、List, Ar…

文字列中の変数の値を表示するプラグインを作った

プラグインの概要 Kotlinの文字列中の変数が定数値の場合に、その値を文字列中に表示するプラグインです。 ↓の例では$tagの表示がtagの値であるtag nameになります。 プラグイン説明 インストール方法 以下の画像のように、IntellijやAndroidStudioの設定か…

data classで配列を使う時はequalsをオーバーライドしよう [Kotlin]

data classとは data classは以下のようにクラスにdataをつけて宣言することで、 コンストラクタで宣言されたプロパティを使ったequals/hashCode/toString関数などを自動生成してくれます。 data class Book( val title: String, val page: Int ) val book1 …

Gradle Kotlin DSLを書くための参考になるサイトやページのメモ

Gradle Kotlin DSL メリット 1回ビルドできる状態にもっていけばあとはコードの補完が効く Groovyを知らなくてもKotlinで書くことができる デメリット gradle(Groovy版)からKotlinDSLに直すのがつらい あまり使っている人を見ないので思わぬバグを踏む可能性…

DroidKaigi2018にいってきた

セッションについて 去年のDroidKaigiでは、MVP, MVVMを使った実装方法、RxJava, Kotlinなどをどう使うか、のようなすぐに役に立つ系の話が多かったイメージがあります。 しかし今年は、なぜそのような設計にしたのか、あるライブラリや技術がどのように実装…

Kotlinで型パラメータの型情報を取得する

フレームワークやライブラリの仕様で、Classインスタンスが必要になる場合があります。 例: AndroidのIntentを作る場合、jsonを特定の型にパースする場合など JavaとKotlinではこのような場合にどのような違いがあるのか調べました。 Javaの場合 以下のよう…

Kotlinで関数の引数などの条件をチェックする関数

kotlinの標準ライブラリに条件式を満たさなければ例外を出すという動作を行う関数が定義されています。 関数内で引数の条件をチェックする場合などに使うと便利なので紹介したいと思います IllegalArgumentExceptionを発生させる 引数をチェックするための関…

演算子オーバーロードを使ってFragmentを生成しない方が良いのではないか

少しツイートが古いですが、Kotlin + AndroidのFragmentで下記ツイートの方法を使っているコードを見かけたので自分の考えを書いておきます ※このツイートがどのような文脈で呟かれたのかを確認していないのでこのツイートだけを見て思った感想です。 class …

Kotlinのデフォルト値を使用した関数やコンストラクタをJavaから使用する際のtips

tl;dr Kotlinコードで定義したデフォルト値を使用した関数,コンストラクタをJavaコードで使う事を想定する場合には@JvmOverloadsアノテーションをつける @JvmOverloadsアノテーション Kotlinの関数やコンストラクタの宣言で、以下のようにデフォルト値を使う…

Kotlinレポジトリのidea pluginやJ2Kのテスト実行方法メモ

Kotlin1.1.50あたりからビルドスクリプトがgradle(Gradle Kotlin Script)になった。その影響かテストの実行方法が変わっていたので、メモしておく ※以下の情報は古くなる可能性が高いのでまずはKotlin(github)のReadmeを先に読んでください Gradleタブから実…

CamTwistを使ってAndroidEmulatorのカメラソースをPC画面にする

バーコード読み取り機能を作る場合などにいちいち実機でバーコードをスキャンするのが面倒臭かったのでなんとかPCに表示した画像をエミュレータのカメラソースにできないか調べてみました CamTwist CamTwistはニコニコ生放送やTwitchなどで配信する時に、Web…

FCMを使ってAndroid端末へ通知を送るスクリプト

Firebase Cloud Messaging(FCM)を使ってAndroid端末へ通知を送るスクリプトを作りました(iOSは非対応です) スクリプト内で送られているデータはcurlを使う場合を参照してください 作成したスクリプト ソースコードは https://github.com/sckm/fcm-send にあ…

FirebaseCrashReportingにmappingファイルをあげるスクリプトを作った

FirebaseCrashReportingにAndroidのマッピングファイルをあげる際に相対パスが使えなかったり、google-services.jsonがapp直下にない時にAppIdなどを指定するのが面倒くさかったのでgolangでスクリプトを作ってみました ソースコードは https://github.com/s…

RxJava2のSingle.zipのエラー処理ではまった話

問題 RxJavaでたまにonErrorReturnItemなどでエラー処理をしていてもたまにエラーがすり抜けてきてアプリが落ちてしまうことがあった 問題となっていそうな部分を簡単に表すと以下のようになっていた Single.zip( Single Single ) .onErrorReturnItem 対処方…

文字列リソースに複数の値を渡す

基本的な方法 複数の値を渡す際には%1$sや%2$sなどを設定する。 1や2で何番目の引数を使うかを指定する <string name="string_res1">1番目%1$s 2番目%2$s"</string> getString(R.string.string_res1, "A", "B") 結果: 1番目A 2番目B 渡した値の一部を使わない場合 引数で複数の値を渡すが文字列リ…

DataBindingでincludeしたレイアウトに値を渡す メモ

AndroidのDataBindingでincludeしたレイアウトに値を渡す時に少し悩んだのでメモ 参考: Data Binding Library 変数の渡し方法 includeされるファイルが以下のような時 <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/apk/res-auto"> <data> </data></layout>

Backgroundに設定した画像を拡大させない方法

AndroidのViewのbackgroundに画像を設定した場合にViewのサイズに合わせて画像も拡大されます 通常は特に問題ないのですがどうしても画像を拡大させたくない場合がある時の対処方法を紹介します 今回は24x24dpの以下のような画像を使いました (AndroidStudio…

ProgressBar用にDrawableを作成メモ

基本的にはdrawの中で描画をしてあげるだけで良い 動きをつける場合にはgetLevel()で取得できる値を元に行うと簡単 getLevel()の値の範囲は[0, 10000] サイズの変更はonBoundsChange(Rect)で受け取れる(drawの前に最初に呼ばれるが必ずそうなのかは要調査) p…

AndroidのRotateDrawableで回転速度を調整する

RotateDrawableとは RotateDrawableはDrawableを回転させることができるDrawableで、以下のようなdrawableファイルを作成することで使うことが可能になります <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/ic_action_reload" android:pivotX="50%" android:pivotY="50%" /> 今回…</rotate>

Android gradleで特定のvariantのみで処理を行う

以下のようなflavorやbuildTypeがある場合にproductReleaseでのみ処理を行いたい場合などがある flavor develop product buildType debug release 以下のようにbuild.gradleでflavorやbuildTypeが何なのかを見て特定のvariantを抽出する 抽出したvariantを使…

SimpleDateFormatのLocaleとタイムゾーンのメモ

Localeを指定するとタイムゾーンが変わるかと思っていたが実際は変わらなかったのでメモ Localeを設定した時の挙動 以下のコードを3つのLocaleで実行してみた Date date = new Date(System.currentTimeMillis()); SimpleDateFormat sdf = new SimpleDateForm…

adbコマンドで引数に&などの記号がある場合の対処法

adbコマンドに文字列を渡す際に、&や|が入っているとうまく文字列が渡されないという問題がある 例えば、以下のようにテキストを入力するためのコマンドのadb shell input textに'&'や'|'が入っている文字列を渡すと途中までしか入力が行われなかったりエラ…

EditTextへのプレーンテキストのペースト

AndroidのEditTextではペーストをすると以下のようにHTMLのタグが有効な状態で表示が行われます 今回はペースト時にプレーンテキストで貼り付けをする方法がないか調べてみました (以下のコードはAPI24のソースコードを参照しています) ペーストの実装を調査…

AndroidでWeb上のSVGファイルを表示

Androidでは公式にSVGファイルの読み込みがサポートされましたが、 drawableディレクトリにあるファイルを表示する方法がメインでWeb上にあるファイルを簡単に表示する方法がわからなかったので調べてみました。 Androidで画像表示用ライブラリといえばGlide…

VS CodeでGoプラグラムを実行

VS Codeとは Visual Studio CodeはMicrosoftが開発したVisualStudioの軽量版でWebアプリケーション作成時に便利なIDEです。 今回はGo言語を使う際の設定のメモを書いておきます。 環境 MacOS X El Capitan Go言語用エクステンションの設定 VSCodeをインスト…