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. blurBitmap
Ve errorHudFrameLayout
doğrudan durum çubuğunun yüksekliğini elde ilgilendirmeyen vermediği için, aynı nedenle atlanmıştır.