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

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

Android

プログラム上から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を付与する。 バックボ…

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…

Notification Channelの設定画面の挙動について

Android Oから通知チャンネルの設定が必須になった代わりにユーザーが 設定画面からチャンネルごとに通知設定を細かく指定できるようになったが 挙動になぞな部分があったのでメモ。 表示順 通知チャンネルは NotificationManager.createNotificationChannel…

Viewの使い回しとIDについて

1つの画面で1つのViewを動的に生成するなどして繰り返し使いたい場合、IDの重複に注意する Fragmentが再描画される際、ViewのIDを元に値を復旧させる。 IDが重複していると同じIDを持つView全てに値が設定されてしまう。 親ViewのIDが異なっていても駄目 対…

App Indexing対応

App Indexingがライブラリ最新化で記述方法に変更があった模様。日本語記事が老朽化してた。以下はマイグレーション方法 https://firebase.google.com/docs/app-indexing/android/migrate

TextViewとandroid:autolinkの話

課題 TextViewにandroid:autolinkを設定すると、TextView内に記述されたURLは電話番号などを自動的にリンク化して クリック可能にしてくれる。これは便利で良いのだけれど、文末がリンクで終わっていたりすると TextViewのwidthがmatch_parentだったりした場…

DeepLink時のバックボタン対応

DeepLink時に必要となるintent-filterの話には触れていない。 遷移後、呼び出し元に戻るための話。 課題 AndroidのDeepLink対応をすることになったがフッタータブや ヒストリー管理があって戻るボタンを押すとアプリ内のバックスタックが動作してしまう。 い…

ViewPagerと親Fragment間でのメニューアイコンの制御

課題 親FragmentでMenuアイコンを表示する必要があるが、 ViewPager内の子FragmentでもMenuアイコンを使用している。 親Fragment側にsetHasOptionsMenuを記述しないと子Fragmentアイコンが重複してされてしまうことがあり、どのようにすればよいか。 対応 双…

DFPのターゲット指定とAndroid側の設定の関係について

疑問 DFPのターゲット指定とAndroidの条件指定、どちらも一致しないといけないのか、そうではないのかが良くわからない。 回答 Android側のaddCustomTargetingの値は、DFP側に定義がなければ考慮されない。あれば一致が考慮される。 DFPのKey-Value値はAndro…

同一ページ内の複数の広告ユニットをまとめる

課題 Adapter内の何箇所かに広告ユニットを仕込みたいが、同じ広告が二度出るのを避けたい。 対応 広告ユニットはプレースメントを使うことでまとめることができるが、プレースメントを ターゲットにしただけでは1つのページで同じクリエイティブが選択され…

イベントリスナー

課題 AdLoaderでDFP広告を取得する際、失敗した場合のイベントを取得したい。 対応 withAdListener()にAdListenerを渡す。エラーの場合はonAdFailedToLoadが使える。 AdLoader adLoader = new AdLoader.Builder(getContext(), id) .withAdListener(new AdLis…

List内で同じ画像が連続して表示される

課題 Picassoを使用して画像を表示させているが、画面のスクロール中にNo Imageなアイテム内に 隣の画像が表示されてしまい、同じ画像が連続していることがある。どうすればよいか。 原因 ViewHolderを使用している場合、オブジェクトの再利用が行われるが、…