Hatena::ブログ(Diary)

前人未踏の領域へ

2017-09-20

[]WebViewとCoordinatorLayoutとNestedScrollView


お題


WebViewのスクロール時にもツールバーを隠すようにしたい

対応


  • WebViewをNestedScrollViewで囲む

WebViewのツールバー対策自体はこれだけでよい。
しかし今度はScroll時に実際にスクロールしているのは
WebViewではなくNestedScrollViewになり、WebViewのgetScrollYは常に0を返ようになる。

なのでスクロールを先頭に戻したい場合は

// mWebView.setScrollY(0) ではなく
mScrollView.setScrollY(0)

とする。

2017-09-13

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


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

表示順


通知チャンネルは NotificationManager.createNotificationChannel()またはcreateNotificationChannels(List list)
を使って追加する訳だがどちらを使っても追加した順には表示されない。どうやらChannlenIDの名前順になっている様子。
要はアルファベット順である。これは通知グループも同様。

チャンネル設定の更新


テストで使っていたチャンネルIDを正式なものに変更してビルドしなおしたところ、
古いチャンネルIDが設定画面にそのまま残っていた。アプリデータを消したら消えたが、
もしかするとアプリのバージョンアップにチャンネルIDの変更がある場合はアプリ側で明示的に消さないといけないのかもしれない。


表示順は結構困る。

2017-09-12

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


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

対策

  • リソースでIDを定義する
  • include時にIDを定義する(IncludeするViewの子ViewでIDを考慮する必要がない場合)
  • generateViewIdを使う(API Level 17から)

自分で名前つけられるのでリソースIDが無難かな。
でもsetIdする対象のViewを取り出すためにfindViewByIdするのはなんか違う。

OSがViewの復旧を試みるのはViewをFieldに持った場合のみかも。

2017-08-16

[]App Indexing対応


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

2017-07-27

[]TextViewとandroid:autolinkの話


課題

TextViewにandroid:autolinkを設定すると、TextView内に記述されたURLは電話番号などを自動的にリンク化して
クリック可能にしてくれる。これは便利で良いのだけれど、文末がリンクで終わっていたりすると
TextViewのwidthがmatch_parentだったりした場合に残りの余白すべてがリンクになってしまい、
余白部分のクリックをリンクが奪ってしまう(端末やバージョンによるかも)。

対策


対策としてはsetText()する際にスペースを最後に一文字足せばそこでリンクが切れるのだけど、
それをautolinkしてるTextViewに全部やるのもちょっと面倒だな。