androidx.browser:browser:1.5.0
以降、Custom Tabsの機能としてPartial Custom Tabsというものが使えるようになっています。
これを使うと、ボトムシートのようにChrome(ブラウザ)を呼び出すことができるようになります。
使い方は、単にCustomTabsIntent.BuilderのsetInitialActivityHeightPx()
メソッドを使って、ボトムシートの高さ(px単位)を指定するだけです。
val customTabsIntent = CustomTabsIntent.Builder(CustomTabsHelper.session).also {
builder.setInitialActivityHeightPx(
resources.getDimensionPixelSize(R.dimen.initial_activity_height),
)
}.build()
customTabsIntent.launchUrl(this, uri)
setInitialActivityHeightPx()
メソッドは第二引数でボトムシートの挙動を指定することもできます。
ACTIVITY_HEIGHT_DEFAULT / ACTIVITY_HEIGHT_ADJUSTABLE / ACTIVITY_HEIGHT_FIXED
の3種類の値が指定できます。
引数を省略すると、ACTIVITY_HEIGHT_DEFAULTが指定され、この挙動はACTIVITY_HEIGHT_ADJUSTABLEと同一になるようです。
ACTIVITY_HEIGHT_ADJUSTABLEを指定すると、表示された状態からシートを引き上げることができます。ACTIVITY_HEIGHT_FIXEDを指定すると引き上げることはできず、閉じることしかできません。
当然ブラウザ側の対応も必要であるため、ブラウザ側が対応していなければ全画面で起動してしまいます。
とはいえ、完全にブラウザに切り替わるのではなく、ボトムシートとしてチラ見せして、ユーザーにブラウザ側に遷移するか、アプリにとどまるかを選択してもらうような使い方ができますね。
現状では確実にこの見せ方ができるという訳ではありませんが、今まで同様のことをやろうと思うと、WebViewを使って独自実装しなければならず、実装コストやメンテナンスコストの高い部分でした、これを外部のブラウザアプリに任せられるようになるのは便利かもしれません。