fix: 大图查看改用 decorView 顶层覆盖

dialog_container 可能被 NavHostFragment 遮挡导致不可见
改为直接添加到 Activity 的 decorView,确保在最顶层
背景改为纯黑(全屏查看更清晰)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
dongliang
2026-05-07 12:35:38 +09:30
parent 43e61ffb70
commit 89602070ae

View File

@@ -444,15 +444,17 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
}
}
/** 全屏显示大图(覆盖在当前页面上,点击任意位置关闭) */
/** 全屏显示大图(覆盖在 Activity 窗口顶层,点击关闭) */
private fun showFullImage(url: String) {
val container = requireActivity().findViewById<FrameLayout>(R.id.dialog_container)
Timber.d("查看大图: $url")
// 使用 Activity 的 decorView 确保在最顶层
val rootView = requireActivity().window.decorView as ViewGroup
val overlay = FrameLayout(requireContext()).apply {
layoutParams = FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
)
setBackgroundColor(0xE0000000.toInt())
setBackgroundColor(0xFF000000.toInt())
isClickable = true
isFocusable = true
}
@@ -464,13 +466,11 @@ class TaskListFragment : BaseFragment<FragmentTaskListBinding>() {
scaleType = android.widget.ImageView.ScaleType.FIT_CENTER
}
overlay.addView(imageView)
container.addView(overlay)
// 点击任意位置关闭(包括图片本身)
val dismiss = { container.removeView(overlay) }
overlay.setOnClickListener { dismiss() }
imageView.setOnClickListener { dismiss() }
rootView.addView(overlay)
// 点击任意位置关闭
overlay.setOnClickListener { rootView.removeView(overlay) }
imageView.setOnClickListener { rootView.removeView(overlay) }
// 加载大图
Timber.d("查看大图: $url")
loadImage(imageView, url)
}