woshidan's blog

そんなことよりコードにダイブ。

Android

インテントフラグとActivityStackのふるまいについていくらか

Android の Activity のスタックの振る舞いを設定するものとして、 AndroidManifest.xml に記述する activity 要素の launchMode 属性 Activity を立ち上げる時に使う Intent に付与するインテントフラグ があります。先日、launchModeの話をしたので、今日…

AndroidのCamera2 APIを触ってみた

ちょっと面白そうだったので調べました。 概要 https://developer.android.com/reference/android/hardware/camera2/package-summary.html からざっくり読み取った結果、Camera2 APIでカメラ経由で画像を取得したりする流れをかなり大雑把にいうと CameraMan…

Activityの起動とlaunchModeについて

ActivityのlaunchMode の違いが気になっていたので、公式で推奨されている standard, singleTop についてざっくり整理しました。 launchMode=“standard"、あるいは指定がない場合 Androidのシステムは常に、ターゲットタスク*1内で新しいActivityのインスタ…

Androidの通知チャンネルの振る舞いをプロジェクトのtargetSDKVersionを変えて少し試してみた

Android OのEaster Eggはoctopusでした*1が、OのコードネームはOreoでしたね。さて、Android Oではユーザーが通知をより便利に管理するために通知チャンネルが導入されました。 通知チャンネルがなんたるかや主要な扱い方については公式他に任せるとして、こ…

Android SDK Toolsのバージョンを25.2.xから25.3.xにあげたらcocos runコマンドが実行できなくなった

症状 Android SDK Toolsのバージョンをあげて cocos runコマンドを実行した際、以下のメッセージが出てビルドできなくなりました。 $ cocos run -p android --android-studio Building mode: debug Using Android Studio project : /Users/woshidan/path/to/…

API19, API21のAndroid端末で透過GIFを表示すると、透過色の部分が真っ黒になることがある

stackoverflow.com stackoverflow.com API19とAPI21のNexus 5のエミュで再現。API18以下、API23以上のエミュでは未確認。 透過色を決めておいて、その色の部分を後から透明にするという対応もありますが、他の画像形式を用いてもよいのではないでしょうか。 …

Android 4.0, 4.1の対応がまだ必要なので、adb shellを使ってAndroidのUIの手動確認自動化について調べてみた

AndroidのUITest(手動)と自称していた手動の確認作業を自動化したかったのですが、UITest用ツールないしフレームワークで現在有力な選択肢と思しきEspressoやAppiumはAPI18以降対応です。そのため、まだ4.0, 4.1系でのテストが外せない自分の仕事の環境では…

java.util.TimerをAndroidで使ってみた場合

以前気になったので素振りした時のメモ。AndroidのバージョンはAPI 21です。 まとめ Timer.schedule(TimerTask task, long delay, long interval)はdelay秒後から、前回のタスクと今回のタスクの実行開始時間の間隔がなるべくintervalになるように定期的にta…

コードでボタンのStateによって色を変えるようにする

前回の続き的なノリで、コードでボタンのStateによって色を変えるように指定するコードを書いてみます。 API21以上の場合 API21以上の場合は、以下のように記述できます。 Button button = (Button) findViewById(R.id.button_bg_code); // 角丸の設定 int r…

ShapeDrawableのRoundRectShapeとGradientDrawableをそれぞれ使って角丸ボタン作ってみた

ShapeDrawableのRoundRectShape、あるいは、GradientDrawableを使うとコードからフチの余白や色を指定できる形で角丸四角形の背景を持つボタンが作ることができます。 もともとShapeDrawableで書いていたのですが、こちらの記事でShapeDrawableのリソースをG…

AndroidのNDKやABIについてのメモ

はじめに C系の言語で動いているクロスプラットフォームのブリッジを作成するには、そのコンパイルなどの過程でNDKに関する知識があるとトラブルシューティングやテストケースの設計に役立つことがあります。 なので、ここではその概要をまとめておきます。…

emulator: ERROR: This AVD's configuration is missing a kernel file!

エミュレータネタ連発。上記エラーが発生した時に確認することを順にメモ。 エラーメッセージ全体 Cannot launch AVD in emulator. Output: emulator: ERROR: This AVD's configuration is missing a kernel file! Please ensure the file "kernal-qemu" is …

ERROR: resizing partition e2fsck failed with exit code 8

stackoverflow.com Androidのエミュレータの設定をいじっている最中、上図のエラーダイアローグを稀によく見かけていたような気がするのですがいままで原因がわからないうちになんか回避してしまっていたのでした。その原因と対応がなんとなくわかったのでメ…

後からコード上でBitmapを与える場合、ImageViewのadjustViewBounds=trueの指定が動かない

結論 onMeasureで一部人間にはよく分からない動きをしている気がします。 ImageViewのandroid:adjustViewBounds属性がtrueで、ImageViewの幅などを直接指定していない場合 ImageViewを許される限り拡大した場合の高さと幅を求める(widthSize/heightSize) 上…

AndroidのImageViewのscaleTypeについて(コード読んだメモ編)

前の記事の検証する前に、いまいち動作がはっきりしないところがあったのでコード読んでいたときのメモです。 力尽きたので雑なのですが。。 どこでscaleTypeの設定を適用しているかを調べるために、 https://github.com/android/platform_frameworks_base/b…

AndroidのImageViewのscaleTypeについて(検証結果スクショ編)

AndroidのImageViewのscaleTypeについて試したのでまとめました。 検証結果について 検証用画像 検証結果スクショ 次の記事であるコード読んだときのメモのところで軽く触れているのですが、各種ScaleTypeはサイズがぴったり合っていたら何もしません。その…

build.gradleでminifyEnabledをtrueにしてもActivityはminifyされない

まとめ Activityはgradleの設定でminifyをかけてもminifyされない minifyされているかの確認をしたかったらJavaだけのクラスを仕込んで見るのがお手軽 検証1 gradleでminifyの設定をした時、うまくいっていたらActivityのクラス名がaなどになっているだろう…

Support LibraryのNavigationViewでどこまでできるのか試してみる

久しぶりにサイドメニューのコードいじろうかと思ったのですが、デザインのカスタマイズ性の都合でサードパーティライブラリを使うのが辛く、ここから整理するよりSupport LibraryのNavigationViewを使って書き直した方が楽ではないか、と思ったので、どこま…

Spinnerのレイアウトをコードで変更する

スタイルを利用した指定がうまく動かなかったり見つけるまでにちょっと時間がかかったりしたので、まあ適当にメモ。 android:id="@android:id/text1"と@android:id/text1がidに指定されたTextViewだけのレイアウトリソースを用意 Spinnerの要素をセットする …

AndroidのWidgetで時計を作ってみる

Androidを立ち上げたらホーム画面にいくつか時計や天気予報などが表示されていると思うのですが、AppWidgetクラスを利用してそういったホーム画面に表示されるウィジェットを作成することができます。 今回は時計もどきを作成してみたのでそのときのメモです…

potatotips #29で「メモリリークに関するウワサの今昔」という題で発表しました

speakerdeck.com 現在上がっているバージョンは発表後、懇親会やブログ記事などで教えていただいたことを元に、まとめの部分のApplicationContextをActivityContextに訂正させていただいております。 ytrino.hatenablog.com Yukiの枝折: Android:引数はthis…

Activityの各ライフサイクルメソッドの役割について

Activityのライフサイクルメソッドをなんとなくしか理解していなかったので、 onCreate onStart onResume onPause onStop onDestroy の順番に呼ばれて、なんとなく、 onCreate、あるいはそこから呼び出すメソッドでレイアウトファイルに書いたViewの初期化を…

ライフサイクルコールバックのsuperについて、自分の実装の先に呼ぶか、後に呼ぶか

ライフサイクルコールバックのsuperについて、自分の実装の先に呼ぶか、後に呼ぶかというのが気になっていて、 java - What is the correct order of calling superclass methods in onPause, onStop and onDestroy methods? and Why? - Stack Overflow とい…

LayoutInfalter#inflateの引数について

RecyclerView.Adapter の onCreateViewHolder メソッドの中で、 @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_in_list, pare…

ToolbarのMenuItemを一度表示した後に切り替えたい

ToolbarのMenuItemを、その後のActivityの状況が変化するなりして切り替えたい*1といったことが稀に良くあります。 そう言う場合、ActivityにToolbarを置いている場合は下記のようなコードでとりあえず対応可能です。 // Activity内 private int mMenuResour…

FragmentでToolbarのMenuを使う

とある事情によりFragmentからToolbarのMenuを使いたくなりました。 Fragmentを使ってMenuを動的に作成する « Tech Booster Android。フラグメントでアクションバーを使う。 - そごうソフトウェア研究所 上記の記事を参考にして試してみたのですが、現在では…

Realmのインスタンスを取得する前にmigrationを常に行うかどうか判定させたい

RealmはAPIが動作が軽量でシンプルで気軽に使えるといわれるAndroid用のDBの一種ですが、 まだまだMigration周りはめんどくさいようです。 Realmを使用したアプリの場合、一度インストールされたアプリ内のスキーマを変更するにはMigrationが必要になりまし…

AndroidのIntentFilterのdata要素のpathPatternの挙動について

http://developer.android.com/intl/ja/guide/topics/manifest/data-element.html data要素のURIでpathPatternの指定が出来るのですが、Patternと言いつつ、 そのパスが一致するか、*のワイルドカードを使ってその階層が入るか、くらいしか指定できず、 andr…

Androidで外部サーバからファイルをダウンロードする

通信周りでRetrofitを使っているとレスポンスがJSONばかりを想定していて、ファイルのダウンロードする場合はどうしたらいいのか、そもそも私はファイル入出力をまともに扱ったことがあったのかと、少し途方にくれてしまったのでメモ。 内容 処理の流れとク…

potatotips #26でKotlinを使っていて思っていたことについて発表してきました

potatotips #26でKotlinを使っていて思っていたことについて発表してきました。 connpass.com speakerdeck.com 発表内容について まず、自分はKotlinを選定していないし、Javaでの経験がしっかりあるわけでもないので、選定理由らしいものをそれらしく言うの…