在WebView(Android Components)中,如何为导航栏添加底部内边距?
我想为WebView中滚动的内容增加底部内边距,这样就不会被导航栏遮挡。同时,我希望在滚动时导航栏保持透明。
WebView实现:
webview:
<WebView
android:id="@+id/web_view"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/appbar_layout" />
fragment:
binding.webView.apply {
settings.javaScriptEnabled = true
visible()
loadDataWithBaseURL("", args.content, "text/html", "UTF-8", null)
}
尝试添加内边距:
val initialPaddingBottom = binding.parishNoticeDetailsWebView.paddingBottom
ViewCompat.setOnApplyWindowInsetsListener(binding.parishNoticeDetailsWebView)
{ view, insets ->
val navigationBars = insets.getInsets(WindowInsetsCompat.Type.navigationBars())
view.updatePadding(
bottom = initialPaddingBottom + navigationBars.bottom
)
insets
}
解决方案
首先,请参考以下内容:https://developer.android.com/develop/ui/views/layout/edge-to-edge
此外,尝试按如下修改你的 Activity:
private lateinit var binding: YourActivityLayoutBinding
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge() // Enable edge-to-edge display
super.onCreate(savedInstanceState)
binding = YourActivityLayoutBinding.inflate(layoutInflater)
val rootView = binding.root
setContentView(rootView)
/*
* Adjusts the root view’s top & bottom padding based on system bars
* (status/navigation) to ensure content (e.g., WebView) is not
* overlapped by system UI.
*/
ViewCompat.setOnApplyWindowInsetsListener(rootView) { v, insets ->
val resolvedInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.updatePadding(
bottom = binding.webView.paddingBottom + resolvedInsets.bottom,
top = binding.webView.paddingTop + resolvedInsets.top
)
insets
}
initWebView()
}
private fun initWebView() {
binding.webView.apply {
settings.javaScriptEnabled = true
visible()
loadDataWithBaseURL("", args.content, "text/html", "UTF-8", null)
}
}
注:此edge-to-edge处理可以移至一个通用的
BaseActivity,以避免在多个屏幕之间的重复。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。