bounty还有4天到期,回答此问题可获得+100声望奖励,Mohsen Mirhoseini希望引起更多关注此问题:我需要一个解决方案或一个有效的讨论与体面的推理,以帮助我解决我的问题。
我有一个全屏FrameLayout
,其中包含四个我在运行时添加的视图:
repeat(4) { i ->
val view = View(this).apply {
setBackgroundColor(COLOR[i])
}
views += view
container.addView(view)
}
为了处理画中画模式的大小更改,我实现了onSizeChanged
方法:
container = object : FrameLayout(this) {
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
super.onSizeChanged(w, h, oldw, oldh)
resizeViews(w, h)
}
}
并根据新的宽度和高度调整我的视图大小:
private fun resizeViews(width: Int, height: Int) {
val isRtl = resources.configuration.layoutDirection == View.LAYOUT_DIRECTION_RTL
val rtlFactor = if (isRtl) -1.0F else 1.0F
views.forEachIndexed { i, view ->
val x = width * LAYOUT[i].first * rtlFactor
val y = height * LAYOUT[i].second
val w = width / 2
val h = height / 2
val layoutParams = FrameLayout.LayoutParams(w, h)
view.x = x
view.y = y
view.layoutParams = layoutParams
}
container.post {
container.requestLayout()
}
}
以下是我的consts:
companion object {
private val LAYOUT = listOf(
0.0F to 0.0F,
0.5F to 0.0F,
0.0F to 0.5F,
0.5F to 0.5F,
)
private val COLOR = listOf(
Color.RED,
Color.GREEN,
Color.YELLOW,
Color.BLUE,
)
}
但切换到RTL布局后,画中画窗口开始以不同的方式运行:
布局检查器显示我的视图已被绘制到屏幕外的某个位置
当我从画中画返回到全屏时,会发生以下情况:
我已经记录了所有的大小计算,LTR和RTL模式之间没有区别,除了Xs的负值,因为它是如何在Android中工作的。
我还尝试了不同的解决方案,比如删除所有视图,然后使用新的布局选项再次添加它们,或者在每个视图上发布requestLayout
,但它们都不起作用。
任何意见或建议将不胜感激。
1条答案
按热度按时间qpgpyjmq1#
我没有找到根本原因或适当的解决方案。
我很幸运,我的内部布局没有需要绘制RTL的UI元素,因此我在运行时将布局方向切换到LTR,它工作得很好:
但仍在寻找原因和适当的解决办法。