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

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。はてなダイアリーから移行したため古い記事にはアプリ以外も含まれます。

Gradle 4.10とFirebaseについて

Android Studioを3.3 Previewにしたところ、Gradleのバージョンを4.10.xに上げるように案内があった。 The Android Gradle plugin 3.3.0 requires Gradle 4.10 and higher, and includes the following updates. で、上げたところアプリが起動しなくなった。…

LayoutInflatorのattachToRootについてのメモ

infrate時の引数 attachToRoot は常にfalseにしとけばOKという おまじないでこれまで問題なくやってきたが trueにするケースに遭遇したのでメモ 遭遇ケース LinearLayoutにViewを繰り返しaddしたい 対象のViewはmergeタグを使用している val tagsLayout: Lin…

Kotlin ラムダ周りの標準関数について(let, also, with, apply, run)

ラムダ周りで似たような関数が多くて使い分けがさっぱり... というかletしか使わずにいたのでこれではいかんと一念発起して整理。 結論 こちらのスタイルガイドラインを参考 Coding Conventions - Kotlin Programming Language ブロックの中身で判断 ブロッ…

先頭にスクロールさせる

お題 選択中のタブをもう一度タップした場合などに先頭にスクロールさせたい。 RecyclerViewにはアニメーション無しのscrollToPositionとアニメーション付きのsmoothScrollToPositionが あるのでスクロール状態に応じて使い分けたい。 対応 対象の画面が縦ス…

ライブラリバージョンの最新化

アプリをリリースしたら次のリリースの前にライブラリのアップデートを行いたい。ある程度はAndroidStudioが教えてくれるが自分で更新したいときに。 gradle-versions-pluginを使う build.gradleを参照して更新してくれるPluginがあるのでそれを使う https:/…

Firebase Cloud Messagingのバックグラウンド状態でのデータメッセージの受信方法について

Firebaseの通知タイプには通知メッセージとデータメッセージの2種類があり、 どちらか一方だけを送信することも、両方送信することもできる。それぞれのメッセージの処理のされ方はアプリがフォアグラウンドにいるかバックグラウンドにいるかによって異なる…

AndroidX Refactor to AndroidX...

Android StudioのAndroidX対応の置換機能を使ったら ConstraintLayoutのところでClassNotFoundExceptionが発生した。 Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.constraintlayout.widget.ConstraintLayout"正しくは androi…

開発者オプション:アクティビティを保持しない

開発者オプション:アクティビティを保持しないをONにすると Activity遷移時に付与したIntentパラメータが遷移先のActivityで受け取れないっぽい。端末 or OSバージョン依存かも。

AndroidX対応

プロジェクトをAndroidX に対応させようかと下記URL参考にやってみたが一筋縄ではいかない感じであった。 https://android-developers.googleblog.com/2018/05/hello-world-androidx.html最終的に成功してないのでこの記事は途中経過の記録である。 対応 app…

プログラム上からSelectorを設定する

課題 同じレイアウトファイルを使うが色が異なる2つのパーツがあり、 プログラム上からselectorを設定し、isSelectedを使ったがsetTextColorとsetBackgroundColorが機能しない。どうすればいいか。 対応 TextColorの場合 プログラム上からsetTextColorでSel…

4系端末にSVG画像を適用する方法と注意点

一応自分で試して対応は確認できたが採用はしていない。以下は必要になった場合に備えての記録。 課題 4系端末でもSVG画像を使いたいが上手く表示されなかったりアプリが落ちたりする。 どうすればよいか。 対応 参考URLの記事を読めば全て書いてあるが、 い…

Andoid6.0でVector画像のdrawableStart, drawableEndのSelectorが機能しない

課題 Selectorを使用したdrawableを作成し、それをTextViewのdrawableStartに設定したが、 Android6.0系の端末だけ初期表示時に有効にならない。 リロードすると正しく表示される。 対応 おそらくバグ。とりあえず主な対処方法は2つ drawableStart、drawable…

前画面に戻った際にAppBarLayoutのスクロール状態が元に戻ってしまう

課題 CoordinatorLayoutを使っている画面で、画面遷移後にバックボタンを押下すると 端末によってはスクロール位置が保持されずにAppBarLayoutが全て開いた状態になってしまっている。 どうすればいいか。 対応 CoordinatorLayoutにidを付与する。 バックボ…

[Android]RecyclerViewのスクロール後にアイテムのタップが 無視される件

課題 RecyclerViewを利用している画面で、最後(あるいは先頭)までスクロールした すぐ後でアイテムをタップしても反応しない。2回タップしたり、しばらく待ってからタップすると反応する。 原因 RecyclerViewはスクロールに応じた3つの状態(SCROLL_STAT…

Mutidex問題。NoClassDefFoundErrorに遭遇

問題 Google Play Servicesを11.8.0に上げたところGoogleAnalytics.getInstance()を実行した時点で 4系端末でNoClassDefFoundErrorが発生してアプリが落ちるようになってしまった。 対応 調べたところMultidex問題に関係してそうだったのでmultidex-config.…

RatingBarに透過背景のカスタムPNG画像を使う

課題 RatingBarに独自の画像を使いたいが背景を透明にしても反映されない。 対応 RatingBarタグのbackgroundをtransparentにする <style name="customRatingBar" parent="@android:style/Widget.RatingBar"> <item name="android:progressDrawable">@drawable/rating_star</item>//layer-listで定義 <item name="android:background">@color/transparent</item>

Spinnerにラベルをつける

課題 プルダウンメニューを使いたいが 未選択時にはスピナーの項目名が表示されているようににしたい。 対策 Spinnerにはタイトルラベルのような概念はないので普通に使うとリストの1件目が表示される。 なので、タイトルっぽいテキストをおいて差し替える…

枠をそれっぽく表現する

課題 領域ごとに背景色が異なる箇所がある。 これまではRelativeLayoutなどのViewGroupを使って背景色を変えるなど調整してきたが、 ConstraintLayoutを使う以上はLayoutのネストを避けたい。どうすればよいか。 対応 枠用のViewを作る。それっぽく見えさえ…

サブクラスをパラメータとして渡す

課題 Android StudioからJavaコードをKotlinに変換したところ、親クラスを引数に持つよう定義されたメソッドにその子クラスをパラメータで渡している箇所がコンパイルエラーになった。どうすればよいか。エラーとなった呼出し元 val fragment = PeopleFragme…

SearchViewのカスタマイズ

課題 ActionBarで検索窓を設置したい。ただしデフォルトとはデザインが異なるため一部カスタマイズが必要である 対応 Googleからは検索用のWidgetとしてSearchViewが提供されている。 こちらをベースに必要な変更を行う 表示する とりあえず表示できるように…

ConstraintLayoutでsetVisibilityが反映されないケース

constraint.Groupに含まれるViewは単独でView.GONEを割り当てても反映されないらしい。 バグか仕様かは不明。

テキストのStyleを動的に変更する

課題 値が設定済みだったらdisabledになるようにテキストのスタイルを変更したい 対応 Styleの動的な変更は結構面倒なのだが、android:textAppearanceなど、スタイルを引数に取るタイプの 属性についてはそのメソッドが使うことでスタイルの変更が簡単にでき…

Radioボタンリスト型のAlertDialogを作る

要件 AlertDialogから選択をさせたい。その際の選択肢をRadioButtonで表示したいが どうすればよいか。また、リストを選択した時点ではダイアログを閉じないようにしたい。 対応 ViewをRadioButtonで作る Adapterを独自に定義、設定する Radioボタンのクリッ…

Layoutにstate_pressedを認識させる

課題 ConstraintLayoutにタッチフィードバックをつけたい。selectorのstate_pressedを使おうとしたが 反応しない。どうすればよいか。 対応 selectorのstate_pressedはViewがclickableでないと反応しない。 <android.support.constraint.ConstraintLayout android:clickable="true" android:focusable="true" android:background="?android:attr/selectableItemBackground" >android:fo…</android.support.constraint.constraintlayout>

RecyclerViewのaddItemDecorationについて

RecyclerViewに対して行間に区切り線(divider)をつけるときにaddItemDecoration()というメソッドを使用する。 このメソッドは2つあり、 addItemDecoration(ItemDecoration decor, int index) と addItemDecoration(ItemDecoration decor) である。てっき…

マージン付きのdivider用drawableを作る

お題 RecyclerViewで使用するdividerの左側にマージンを確保したい。 対応 レイヤーリストとoffsetの組み合わせでできた。とりあえず基本となるdividerを用意する(drawable/divider.xml などとする) <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> </shape>

Material Designのガイドラインを見ていたらXML定義に関する記述があった。 https://material.io/components/android/docs/contributing/ Resource naming (including IDs) is lowercase_with_underscoresこのリソース名ってファイル名だろうか。IDsとはandr…

Twitter Kit 3.0に関する覚え書き

認証について TwitterAuthClient.authorize()を使う アカウント連携画面の結果はTwitterAuthClient.onActivityResult()で受け取る TwitterAuthClient.authorize()は状態(authState)を持つ アカウント連携画面でキャンセルされた場合もTwitterAuthClient.on…

SimpleDateFormatのISO-8601対応について

JavaのSimpleDataFormatのフォーマットパラメータにタイムゾーン指定を追加すると +0900 が追加される ISO8601では+09:00も有効である。なのでSimpleDataFormatではJava7からZに加えてXを定義している String a = "yyyy-MM-dd'T'HH:mm:ssZ"; //+0900になる S…

WebViewとCoordinatorLayoutとNestedScrollView

お題 WebViewのスクロール時にもツールバーを隠すようにしたい 対応 WebViewをNestedScrollViewで囲む WebViewのツールバー対策自体はこれだけでよい。 しかし今度はScroll時に実際にスクロールしているのは WebViewではなくNestedScrollViewになり、WebView…