woshidan's blog

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

Android

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での経験がしっかりあるわけでもないので、選定理由らしいものをそれらしく言うの…

BottomSheetを作るためのライブラリについてメモ

stackoverflow.com 現在、公式のサポートライブラリに無いマテリアルデザインのコンポーネントで、BottomSheetというものがあります。 下からすっと選択肢が出てくるシートですね。 DIalog用のActivityやFragmentをいじってごにょごにょとね...とか、時間が…

Android開発に入る前に知っておきたかったこといくつか

ぐぐっても出てき難かったし、聞くまでもないでしょ的なことなのか一通り書いてみるまで分からないことにすら気づけなくて後からひえーってなったことの覚え書き。 端っこの要素のmarginの扱いについて 時々古いAPIバージョンでダイアローグ等のレイアウトを…

AndroidのFacebook SDKでInvalid key hash

FacebookSDKを使ったアプリをリリースしたら下記のようなメッセージが出ました。 Invalid key hash. The key hash xxxxxxxxxxxxxxxxxxxxxx does not match any stored key hashes. Configure your app key hashes at http://developers.facebook.com/apps/ A…

PicassoでMediaStoreを通してローカルの画像を読み込むとサムネがおかしい

昨日のつらぽよを書き出しておきます。 コンテンツプロバイダでローカルの画像を取得してPicasso使ってギャラリーみたいなことやりたいなぁ、と思っていたら、なんとこのギャラリー、タップするたびに同じ位置に入る画像が変わるので困りました。 最初は、 s…

Android Internalsを読みました

techbooster.booth.pm こないだのコミケのテックブースターの本を3冊買っていたのですが、ようやく少し余裕が出てきたので一冊読んでました。 自分は初心者なので全体の半分でも興味があればいいかな、という感じで買っていまして、それで、自分が特に関心を…

ActionBarのUpナビゲーションとLaunchModeについて

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 上記のようなコードで設定するActionBarのUpナビゲーションは基本的に、 <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> </activity>

周囲をタッチしたらEditTextのフォーカスを奪う

EditTextにフォーカス当たってても戻るキーを押したら、キーボード閉じるんですけど、ちょっと不便だわという感じなので、何も無いところというかEditText以外をタップしたらEditTextのフォーカスを奪うようにします。 ActivityでView.OnTouchListenerを実装…

launchModeをsingleTopにしておくと何が起こるか

二重Activity起動、嫌、絶対。 というとき、自分の場合は以下の二つのような場合があります。 フォームを連打したところ、その結果のActivityが何個も起動される 2つ行き来したいActivityがあって、Intentを送り合ったりしているうちに両方がずんずんどこど…

ProgressDialogの色を変えたかったのでカスタムレイアウトをDialogにぶっこむ

ProgressDialogのProgressBarの色を変えようと思ったんだけど色いじるAPI見あたらなかったので、Dailogにカスタムレイアウトを突っ込んでみた。 とりあえずDialogで書いてから、DiaogFragmentでも書いてみた。 Dialogの方 public class MainActivity extends…

java.lang.VerifyErrorで検討したこと

今日作業してたらいきなり、java.lang.VerifyErrorという聞き慣れないエラーが出てきてびびった。 眺めていたのはこの辺。 blog.livedoor.jp Android Studio 0.5.4 update causes Java.Lang.VerifyError - Stack Overflow ライブラリのバージョンが実行時と…

Androidの上とか下とかのバーについてのメモ

忘れがちなのでメモ。 http://developer.android.com/intl/ja/training/material/theme.html http://developer.android.com/intl/ja/about/versions/android-4.4.html StatusBarを半透明 -> v19から 指定を書く箇所 styles.xml -> true layout -> android:fi…

IntentServiceで動かしているバックグラウンドジョブの進捗や結果をLocalBroadCastReceiverで通知する

表題のことがやりたいぞ、というわけで下記あたりを参考に素振りしました。 Reporting Work Status | Android Developers AndroidのIntentServiceを使って非同期処理を行う方法 | TechBooster 手順 バックグラウンドジョブを実行するIntentServiceを作る Int…

build.gradleのdependenciesに追加されたライブラリのライセンス情報を出力する

どうすればいいんだーって感じで意外に詰まったのでメモ。 参考 github.com gradleでdependenciesのライセンス一覧を出力する - Olivinecafe - blog 手順 build.gradleの設定 buildscript { repositories { mavenCentral() maven { url 'https://plugins.gra…

AndroidStudioのショートカットetcを復習する

Android開発を担当するようになってから2ヶ月くらい経ちましたが、実はちょっとした検索や置換(特に検索)はAndroid Studioでなくて、Sublime Textを使用しています。 しかし、やっぱり表示されていないクラスの関数の補完やオーバーライドするメソッドの生成…

レイアウトファイルを利用してCustomViewを作る

いまさらですが、サポートライブラリの中の人から分かりやすいスライドも出ているし、CustomViewの作り方をあらためて勉強し直しました。 参考 サポート ライブラリのできるまで qiita.com qiita.com 目次 Viewを継承したクラスを作る values/attrs.xmlにカ…

RxJavaのonSubscribeメソッドで指定したスレッドはどこで生成されて起動されているのか

この記事は、RxJava Advent Calendar 2015 の12月15日分の記事です。 非同期処理についてよくわからなかったため、下記の本を読んでみたところ、スレッドで処理が行われるには、 スレッドのインスタンスが生成されること そのインスタンスのstart()メソッド(…

FragmentPagerAdapterをおいたActivityから現在表示されているFragmentを取得したい

FragmentPagerAdapterを使って画面の一部だけを遷移させていくとき、その中の1つの画面から他のアプリ等にstartActivityForResultでIntentを飛ばして連携したい部分がありました。 FragmentにonActivityForResult()メソッドってあったかしら、というところか…

FragmentでFabricのTwitter SDKが動いていないような...

関連: Access Twitter’s REST API — Fabric Android documentation stackoverflow.com FragmentManager | Android Developers など。 もしかして、ActivityからFragmentを取得するとき、FragmentManagerにわたすリソースのidがFragmentの一番外側のレイアウ…

MavenのリポジトリやjarファイルをGradleで読み込むように指定する

参考: http://qiita.com/ryusukefuda/items/bbb25382d05cf9cb5057 感動したのでメモ。 Mavenリポジトリにある場合 なんだかgroupIdが見たことある形だし、構造が似てたので書いてみたらいけた。 <dependency> <groupId>com.facebook.android</groupId> <artifactId>facebook-android-sdk</artifactId> <version>4.8.1</version> </dependency> reposito…

RxJavaと1日悪戦苦闘したときのメモ

1日悪戦苦闘してなにかつかんだ気がしたのでメモした。12月の私にさえ読めればそれでよい...? RxAndroidはAndroidのViewのイベントに関するObservableを作ってくれる + Androidのスレッド指定に定数が便利、みたいな捉え方してる。

RetrofitのError時のResponseがParseできない

今日の実装箇所は、1つのエラーコードに対しエラーが3つ以上存在するということで、 どうしてもレスポンスボディが欲しかったのですが、RetrofitのError時のResponseが うまくParseできなくて詰まってました。 stackoverflow.com qiita.com 上の記事を参考に…

potatotips #23で発表しました

発表しました 懇親会で苦労してますよねぇ、という話が出来ただけでもよかったです。 ぐぐるといろいろ出てくるけれど、ライブラリーはライブラリーの要素を優先してみるからライブラリーの要素からいじろう 位置関係はライブラリーの要素が優先して配置され…

Grid数に合わせてViewの位置がFrameLayoutの幅を超えたとき

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#ccc" android:layout_width="100dp" android:layout_height="100dp"> </framelayout>

他の会社のレビュー基準とか

レビューを受けられないから他社のを拝借したいのでメモ。見つけ次第追加する。 nein37.hatenablog.com qiita.com 暇なメモ帳: Androidのソースコードレビュー(メモリリーク) Code Style Guidelines for Contributors | Android Open Source Project

Androidのサンプルのコード読んでみた

思い立ったので眺めてみたけど、クラスに入っていた日付が2013年でちょっと古かったのでクラスの構成とかこういうこともできるんだ〜的な感じで眺めてました。 週1~2くらい適当に探して眺めると良いかも...。 クラス構成の話 サンプル概要 RSSか何かのフィー…