前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

2015-01-01から1年間の記事一覧

Swaggerについて学ぶ(基礎知識編)

Swaggerとは Swaggerは言語に依存しないREST APIのインターフェース仕様とそのツール群を指す。 Swaggerの仕様に沿ってAPIを定義することで、人間が理解可能で、コンピューターにも解析可能なAPI仕様書となる。http://swagger.io/getting-started/ Swaggerの…

RecyclerViewの入れ子

お題 縦スクロールしているRecyclerViewに横スクロールするRecyclerViewを含める事は可能か。 結論 可能です。サンプルコードはありません。でも私は出来ました。 これからチャレンジする人のために結論だけ。 注意点だけ記載しておく RecyclerViewまたはLay…

最新のbuildToolsVersionを確認する

課題 SDK-Toolsにアップデートがあったようなのでbuild.gradleでbuildToolsVersionを設定したいが、 Android Studioのアップデート画面を見てもバージョンが表示されておらず、設定可能なバージョンが良く分からない。 対応 SDK Toolsのアップデートを行った…

RecyclerViewでいい感じに可変Gridレイアウトを実現する

LayoutManager.SpanSizeLookupというクラスを使うと、ポジションごとに使用するカラム数を選択することができ、テーブルのセル連結のようなリストが作成できる。HTMLのcolSpan属性みたいなものである。とりあえずコードの断片。 final GridLayoutManager lay…

RecyclerViewでアニメーション( DefaultItemAnimator 編 )

RecyclerViewでアニメーションが可能なこと、DefaultItemAnimatorが仕込まれていることが分かったが、何をトリガーにしてアニメーションが発生するのかが不明だったのでメモ。 List mItems = new ArrayList(); RecyclerView.Adapter mListAdapter; mItems.ad…

Material Design 準拠のdividerを作る

Material Designではdividerについても言及している。作っておくと何かと便利なので作成しておく。 仕様 https://www.google.com/design/spec/components/dividers.html#dividers-specs にある通り 厚さ1dp 12%白または黒の12%の不透明度(テーマの明暗により…

Jsonレスポンスのキー名を小文字にしたい。

Go

課題 JSONをAPIサーバーを作成中である。構造体を外部アクセスさせるためには大文字で変数を定義する必要があるが、そうするとJsonにMarchalした際に大文字になってしまう。返す際にKey名を小文字で返すにはどうすれば良いか { "Id": 1, "Name": "Taro" "Job…

Gradleのコンパイル時の使用メモリを設定する

コンパイル中にOOMが発生したのでjavaMaxHeapSizeをdexOptionsで設定 android { dexOptions { javaMaxHeapSize "2048M" } } 参考 http://stackoverflow.com/questions/17447410/outofmemoryerror-when-compiling-my-android-app-with-gradle

Vagrant上のMySQLにホストOSから接続する(Portforward編)

VagrantにMySQLをインストールしたあとで、ホストコンピュータからログインしたい。そんなケース。 ホストコンピューター上にmysqlクライアントがインストール済みな想定。 Vagrantfile編集 my.cfg編集 ユーザー追加 接続確認 Vagrantfile編集 以下を有効に…

Root要素が配列なJSONのパース

課題 APIのレスポンスのJSONがいきなり無名の配列になっていてGsonでパースする方法がわからない。 [ {hoge:1, fuga:"aaa"}, {hoge:2 fuga:"bbb"}, {hoge:3, fuga:"ccc"}, {hoge:4 fuga:"ddd"} ] 対応 受け入れクラスとしてクラスの配列を定義する @GET("/ho…

FragmentのonAttach(Activity)がAPI Level 23 で deprecatedに

onAttach (Activity activity) がdeprecatedになった。 代わりに onAttach (Context context) を使えとのこと。 @Override public void onAttach(Context context) { super.onAttach(context);Activity以外が渡されるケースもあるのだろうか。ちなみにgetAct…

Android Support Library to v23でApache HTTP Client が削除されている

課題 Android Support Library to v23でorg.apache.httpパッケージが削除されてしまい、コンパイルエラーになる 対策 org.apache.http.client.HttpClientをはじめとするhttpClient系のクラスは以前からdeprecatedとなっていたが、Support Library v23でコー…

RecyclerViewのTouchイベント処理にはaddOnItemTouchListenerを使った方がいい。

setOnTouchListenerがあるのだけど、子ビューのイベント定義がしてあると発動しないか、遅れる。継承クラスを作ってInterceptTouchEventを拾う方法もあるが、この場合はACTION_UPが発生しない。 addOnItemTouchListenerならonInterceptTouchEventもonTouchEv…

Unable to bind views forをくらう

課題 ButterKnifeを使ってViewHolderのbindを行ったところ、RuntimeExceptionが発生した。 java.lang.RuntimeException: Unable to bind views for $パッケージ名 at butterknife.ButterKnife.bind(ButterKnife.java:322) at butterknife.ButterKnife.bind(B…

ScrollViewのスクロール位置の再現

注意 この記事は何らかの(失念)実装ミスをした際に発生した副作用に対する誤った解決策であり、 この処理が必要になるのは別なところに記述ミスがある可能性が高いと思う。 基本的に戻るボタンで戻った際にスクロール位置の再現が必要になることはないと思…

CoordinatorLayoutとViewPagerの共存

課題 あるViewの下にViewPagerがある。ViewPager内のリストをスクロールした際に、その上のViewもスクロールさせたい。 対策 CoordinatorLayoutとAppBarLayoutと合わせて使う。

SwipeRefreshLayoutソースコード読み

子View検出 子Viewがいるかどうかの判断。最初に見つかったものを対象にしている。 なので、SwipeRefreshLayoutの直接の子ビューは1つしか対象にできない、ということが分かる。 逆に、addViewやremoveViewは使えるのかも。 private void ensureTarget() { …

SwipeRefreshLayoutのsetRefreshingが表示されない

課題 SwipeRefreshLayoutを使っているが、初期表示のタイミングでsetRefreshing(true)としてもローディングアニメーションが表示されない。 対応 Message queueを使用して処理の実行タイミングを遅らせる。 private SwipeRefreshLayout mSwipeRefreshLayout;…

Dateformatのフォーマットキャラクタについて

Dateformatのフォーマットで利用できるキャラクタはバージョンにより異なる。 The format methods in this class implement a subset of Unicode UTS #35 patterns. The subset currently supported by this class includes the following format characters…

RecyclerViewにフッターを表示する

課題 RecyclerViewの追加読み込み時にフッターを表示したい。 対策 リストの最後尾にFooter用のオブジェクトを追加し、ViewTypeで判別して出し分け。追加データ取得時に削除する。エレガントな方法ではないけれど、とりあえず思いつく簡単な方法。 任意の型…

RecyclerViewにオートスクロール機能をつける

課題 RecyclerViewでもオートスクロールを実現したい 対策 RecyclerView#addOnScrollListenerとLinearLayoutManager#findLastVisibleItemPositionを組み合わせる。LinearLayoutManagerにはfindLastVisibleItemPositionという一部が見えている最後のアイテム…

ActionBarにロゴを表示する。

課題 AppCompatActivityに変更したところ、ActionBarに表示していたロゴが表示されなくなった。どうすればよいか。 対策 ActionBarに対してロゴ出力設定を有効化する。 ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar(); i…

ひらがなをカタカナに変換する。

課題 ひらがなで入力された文字列をカタカナに変換したい。 対応 1文字ごとにひらがなかどうかを判定し、文字コードをカタカナの位置までずらす。ひらがな判定に固定値でユニコード範囲を使用してもいいのだけど、 UnicodeBlockにHIRAGANAが定義されているの…

SwipeRefreshLayoutとRecyclerViewを同時に使用すると挙動がおかしくなる場合の対策

課題 SwipeRefreshLayoutとRecyclerView, GridView, ListViewを同時に使用した際、リストの先頭まで戻らないうちにスワイプリフレッシュが実行されてしまう。 対策 参考のURLを元に制御する。 RecyclerView#setOnScrollListenerは既にDeprecatedとなっている…

Android Studioのメモリを設定する

課題 Android Studioのメモリが不足するため設定を変更したい。 対応 studio.vmoptions(またはidea.vmoptions)を指定のフォルダにセットする。 設定ファイルは~/Library/Preferences/ 配下にAndroidStudioのバージョンに応じて個別に置かれるのでアップデー…

ソフトウェアキーボードのアクションを設定する

課題 検索フォームにて、ソフトウェアキーボードの改行ボタンに相当する部分を検索アイコンにしたい。 対応 EditTextなどの属性でimeOptionsを使う android:imeOptions="actionSearch" 参考 imeOptions 一覧 http://developer.android.com/#imeOptions

AndroidのUIテストとJavaテストを分ける。

課題 AndroidのUIテストとJavaのテストを分けて記述したい。 対応 testとandroidTestをうまく使う。それぞれがごっちゃになってるといろいろうまく行かない。 BuildValiantsを切り替える テストの目的に応じて変更する。 View > Tool Windows > BuildValiant…

testCompileとandroidTestCompileの違い。

課題 Androidの公式サイトを読んでいるとtestCompileとandroidTestCompileというのが2つ出てくるが、その違いは何か。どう使い分ければいいのか。 回答 src/test 以下に記述した内容はtestCompileに影響する。 src/androidTestに記述した内容はandroidTestC…

junit.framework.AssertionFailedError: No tests found が発生する

環境 Android Studio 1.3 RC4 Android SDK Tools 24.3.3 Android Support Library 22.2.1 Google Play Services 25.0.0 課題 Android StudioでJUnit4によるテストを書いてみたが、@Testアノテーションをつけたにも関わらず、実行するとテストが見つからない…

Google Play Servicesのオープンソースのライセンス情報を取得する。

Google Mapをアプリで使用する場合など、ライセンスを明記する必要があるが、そのテキストをGoogleが提供してくれている。 String licenseInfo = GoogleApiAvailability.getInstance().getOpenSourceSoftwareLicenseInfo(); 参考 https://developers.google.…