サンプル見てましたが。
android-PictureInPicture/README.md at master · googlesamples/android-PictureInPicture
...。
ただ、縮小されたActivityを常駐的に端末画面の上に載せたいだけなのですが...。
最小限の実装
BlankActivityで実装するだけ。
これぐらいまで。
AndroidManifest.xml
<activity android:name=".MainActivity"
android:resizeableActivity="true"
android:supportsPictureInPicture="true"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation">
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (VERSION.SDK_INT >= VERSION_CODES.O) {
text.setOnClickListener {
val params = PictureInPictureParams.Builder().apply {
setAspectRatio(Rational(4, 3))
}.build()
enterPictureInPictureMode(params)
}
}
}
override fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean,
newConfig: Configuration) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
if (isInPictureInPictureMode) {
text.text = "small"
setFullScreen(true)
} else {
text.text = "normal"
setFullScreen(false)
}
}
private fun setFullScreen(on: Boolean) {
window.decorView.systemUiVisibility = if (on) {
SYSTEM_UI_FLAG_LAYOUT_STABLE or
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or
SYSTEM_UI_FLAG_HIDE_NAVIGATION or
SYSTEM_UI_FLAG_FULLSCREEN or
SYSTEM_UI_FLAG_IMMERSIVE_STICKY
} else {
SYSTEM_UI_FLAG_LAYOUT_STABLE
}
}
}
PinPモードに入ったときのレイアウト変更は、フルスクリーンモードでツールバーを隠すのみ。
Preview 公開当時のサンプルが多いので、今現在の最小限実装でやってみたメモ的な。
関連APIは変化している様子。