Bu sorun, Pixel 3XL'imdeki çentik nedeniyle son zamanlarda benim için alakalı oldu. Android geliştiricisinin çözümünü gerçekten çok sevdim , ancak oynamak istediğim tam ekran animasyon için özellikle gerekli olduğundan, durum çubuğu yüksekliğini istediğiniz zaman elde etmek istedim. Aşağıdaki işlev güvenilir bir sorgu etkinleştirdi:
private val DEFAULT_INSET = 96
fun getInsets(view: View?): Int {
var inset = DEFAULT_INSET
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//Safe because only P supports notches
inset = view?.rootWindowInsets?.stableInsetTop ?: DEFAULT_INSET
}
return inset
}
fun blurView(rootView: View?, a: SpacesActivity?) {
val screenBitmap = getBitmapFromView(rootView!!)
val heightDifference = getInsets(rootView)
val croppedMap = Bitmap.createBitmap(
screenBitmap, 0, heightDifference,
screenBitmap.width,
screenBitmap.height - heightDifference)
val blurredScreen = blurBitmap(croppedMap)
if (blurredScreen != null) {
val myDrawable = BitmapDrawable(a!!.resources, blurredScreen)
a.errorHudFrameLayout?.background = myDrawable
a.appBarLayout?.visibility = View.INVISIBLE
}
}
Ve sonra aktivite sınıfında:
fun blurView() {
this.runOnUiThread {
Helper.blurView(this)
}
}
Elbette etkinliğin statik Helper sınıfı yöntem parametresine zayıf bir referansını iletmek isteyeceksiniz, ancak kısalık uğruna bu örnekte reddedildim. blurBitmapVe errorHudFrameLayoutdoğrudan durum çubuğunun yüksekliğini elde ilgilendirmeyen vermediği için, aynı nedenle atlanmıştır.