#potatotips 45 (iOS/Android開発Tips共有会) Android まとめ

potatotips #45 (iOS/Android開発Tips共有会) – connpass に Android ブログ枠として参加しました。

今回の Android の発表は以下の通りでした。


iOSエンジニアが悩んだUpボタンについて

Android エンジニアでもたまに悩む? Up ボタンについての発表でした。
Navigation with Back and Up でも Play ストアを例にしていて、Book details の Up ボタンは Book list に移動するが、Book details から Movie details に移動すると Up ボタンは Movie list に移動するようになります。

前の画面に戻る Back ボタン はわかりやすいのですが、上の階層に移動する Up ボタン はアプリの階層を理解していないとどこに移動するかわからないので、なかなか難しいところです。

Tips として、Up ボタンの移動先を動的に変更する方法を紹介していました。


AutoSizingTextView

Autosizing TextViews は Android 8.0 からの機能ですが、Support Library でも提供されているので、ほとんどの端末に導入することが可能です。
この View を使う注意点として、下記の内容を発表されていました。

  • wrap_content を指定しない
  • android:singleLine を使わない

singeliLine は API level 3 から非推奨なので maxLines を使えば問題ないのですが、wrap_content はうっかり使ってしまうことがありそうなので注意したいところです。


InViewとOutView 〜Viewの表示を検知する〜

この発表では View の可視領域の割合が閾値を超えたら検知するというお話でした。ViewTreeObserver が大活躍する分野です。
ViewTreeObserver で監視して、View#getDrawingRect(Rect)View#getGlobalVisibleRect(Rect) を駆使して可視領域の面積を求める方法が紹介されていました。


Activity の背景をぼかす

上の Activity の背景がぼやけて下の Activity がうっすら見える方法が紹介されていました。
API level 14 までなら FLAG_BLUR_BEHIND で実装できたと思うのですが、この発表では下記の手順で実装されていました。

      下の Activity の背景をキャプチャする
      Blur 処理をかける
      上の Activity の背景に指定する

重い Blur 処理は、久しぶりに見た AsyncTaskLoader で対応されていました。


Android におけるライフサイクル

ライフサイクルのイベント検知が楽に実装できるようなる Handling Lifecycles with Lifecycle-Aware ComponentsViewModel の使いどころを発表されていました。

Application#registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks) と勘違いしていたのは秘密です。
ViewModel は Configuration Changes を超えて生存できるが、それ以外の再生成には対応しないので使いどころを考える必要があるとのことでした。

Dagger の Releasable References は強参照と弱参照を切り替えられる機能で、便利そうです。


Swaggerで定義したAPI仕様から Retrofitで使用するinterfaceを自動生成してみる

Swagger で API の仕様が定義されており、それを利用して Retrofit の Interface を生成するお話でした。iOS でも発表があり、共通の API から自動生成するのは理に適っていると思いました。
下記が手順です。

Gradle Plugin 化は How to Create Gradle Plugin in Kotlin を参考にしたそうです。


WebView😇😇😇

カメラの罠とどっちが多いのかわかりませんが、できれば触りたくない WebView についての発表でした。
WebView に WebViewClient を指定せずにローカルなファイルのリンクを踏むと、FileUriExposedException という例外が発生する罠でした。


Testing Flutter Samples

Building Beautiful UIs with Flutter の次のステップとして、サンプルが紹介されていました。クロスプラットフォームを避けてきたのですが、デモを見せられて挑戦してみたくなりました。

  • Basic
    • hello_world
  • Component Sample
    • catalog
    • layers
  • Native Integration
    • flutter_view
    • platform_channel
    • platform_channel_swift
    • platform_view
  • Advanced
    • flutter_gallery
    • stocks

いまさら始める Instant App

私も Prott Blog – Prott Viewer for AndroidがInstant Appsに対応しました📲🎉 で日本では比較的早く対応した(と思う) Instant Apps の話でした。短い時間ながらも一から手順を紹介されていました。
既存のアプリを対応させるのは設計次第で難易度が分かれると思いますが、対応できるならしておきたい機能です。


.class ファイルから Kotlin だった時の姿を知りたいマン

ネストした data class のデータを自動生成するために .class ファイルを調べたお話でした。
.class ファイルに @lkotlin/Metadata があって、d1 や d2 がどうのこうのと話が進んでいましたが、すでに調べるメソッドが用意されていたという落ちでした。KClass.isData です。

Android

コメントを残す

メールアドレスが公開されることはありません。