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