Edge-to-Edge android15导航栏遮挡内容适配
Author: yandongletterCreated Aug 5, 2025Updated Feb 27, 2026
可以在application中监听给android.R.id.content添加padding解决三方库未适配的问题
private void registerActivityLifecycleCallbacks() {
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
if (activity instanceof PictureSelectorSupporterActivity ||
activity instanceof PictureSelectorTransparentActivity ||
) {
//your idea
NavigationBarUtil.INSTANCE.applyNavigationBarPadding(activity);
}
}
}
object NavigationBarUtil {
val SUPPORT_EDGE_TO_EDGE_VERSION = Build.VERSION_CODES.VANILLA_ICE_CREAM//15+
@JvmField
val isEdgeToEdgeSupported = Build.VERSION.SDK_INT >= SUPPORT_EDGE_TO_EDGE_VERSION
/**
* 适配底部导航栏 : 给根布局添加底部导航栏的padding
*/
fun applyNavigationBarPadding(activity: Activity) {
if (isEdgeToEdgeSupported) {
//Edge-to-Edge 模式适配
val rootView = activity.window.decorView.findViewById<View>(android.R.id.content)
if (rootView != null) {
applyNavigationBarInsets(rootView)
}
}
}
/**
* 给view添加一个底部导航栏高度的padding
*/
fun applyNavigationBarInsets(view: View) {
val initialPaddingBottom = view.paddingBottom
ViewCompat.setOnApplyWindowInsetsListener(view) { v: View, insets: WindowInsetsCompat ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(
v.paddingLeft,
v.paddingTop,
v.paddingRight,
initialPaddingBottom + systemBars.bottom
)
insets
}
}
}Source: LuckSiege/PictureSelector