Android9.0 PopupWindow 适配刘海屏,水滴屏等
现象:弹出PopupWindow选项框后,刘海屏或水滴屏不能到顶。
改进后代码:
popupWindow = PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true).apply {
setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
contentView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M || Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
isClippingEnabled = false
}
animationStyle = R.style.FadeInAnimation
}
如果是9.0及以上就不允许裁剪。
styles.xml文件:
<style name="FadeInAnimation">
<item name="android:activityOpenEnterAnimation">@anim/fade_in</item>
<item name="android:activityOpenExitAnimation">@anim/fade_out</item>
<item name="android:activityCloseEnterAnimation">@anim/fade_in</item>
<item name="android:activityCloseExitAnimation">@anim/fade_out</item>
<item name="android:fragmentOpenEnterAnimation">@anim/fade_in</item>
<item name="android:fragmentOpenExitAnimation">@anim/fade_out</item>
<item name="android:fragmentCloseEnterAnimation">@anim/fade_in</item>
<item name="android:fragmentCloseExitAnimation">@anim/fade_out</item>
</style>
fade_in.xml:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="250"
android:fromAlpha="0.5"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:toAlpha="1"/>
fade_out.xml:
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="250"
android:fromAlpha="1"
android:interpolator="@android:interpolator/accelerate_decelerate"
android:toAlpha="0.5"/>
如果出现内容尺寸异常,则设置其宽高。
isClippingEnabled = false
val lp = ViewGroup.LayoutParams(width, height)
view.setLayoutParams(lp)
view为布局
activity适配刘海屏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val lp = window.attributes
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
window.attributes = lp
}