如何在不刷新 activity 的情况下使 android 横向布局工作?
How to make android landscape layout work without refreshing activity?
我已经看到有关删除 android:configChanges 以使横向布局正常工作的答案,但这会刷新 activity,我需要避免这种情况。一些答案建议以编程方式处理配置更改,但我不确定该怎么做。横向布局应该以编程方式创建吗?有人知道如何解决这个问题吗?
您可以使用 OrientationEventListener 监听方向变化,
这是一个 kotlin 示例代码,它将监听方向变化并检查它是横向还是纵向模式,
私有变量 mOrientationEventListener:OrientationEventListener? =空
私有阈值 = 30
私有变量 isLandScape = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mOrientationEventListener = object : OrientationEventListener(context) {
override fun onOrientationChanged(orientation: Int) {
isLandScape = isLandscape(orientation)
}
}
mOrientationEventListener!!.enable()
}
private fun isLandscape(orientation: Int): Boolean {
return orientation >= 90 - THRESHOLD && orientation <= 90 + THRESHOLD || orientation >= 270 - THRESHOLD && orientation <= 270 + THRESHOLD
}
override fun onDestroy() {
super.onDestroy()
mOrientationEventListener!!.disable()
}
根据 landscape/portrait 模式,您可以通过 setRotation 属性 旋转视图。
正确答案是从清单中删除 android:configChanges,并正确处理正在重启的 activity。有一些技术可以解决您可能遇到的所有问题,除了旋转变化之外,还有许多其他因素可能导致它发生。
如果您绝对必须自己处理它,您可以通过覆盖 onConfigurationChanged 并检查是否是方向发生了变化来实现。但你不想那样做。如果您尝试自己做,那么您将拥有因自己不正确地做而导致的所有错误,并且由于您没有正确处理 activity 而未修复的所有错误都会重新启动。所以忘掉这个,从你的清单中删除 configChange,并修复它,这样你就可以处理重启。因为在您这样做之前,您的应用程序将变得一团糟,崩溃报告比您想象的要多。
你可以为此创建新的布局文件,与你的布局同名
并选择 Orientation in available qualifiers。
Android 管理一切。
如果您不想重新创建 activity,则必须使用带方向的 android:configchanges。您将必须在 onConfigurationChanged 方法中以编程方式处理布局。它可能很复杂,因为您不允许系统处理它。您将必须以编程方式设置对齐方式、参数和所有其他结构。您将获得现有纵向模式元素的参考,并且必须自己更改它们的位置和其他内容。
我已经看到有关删除 android:configChanges 以使横向布局正常工作的答案,但这会刷新 activity,我需要避免这种情况。一些答案建议以编程方式处理配置更改,但我不确定该怎么做。横向布局应该以编程方式创建吗?有人知道如何解决这个问题吗?
您可以使用 OrientationEventListener 监听方向变化,
这是一个 kotlin 示例代码,它将监听方向变化并检查它是横向还是纵向模式,
私有变量 mOrientationEventListener:OrientationEventListener? =空
私有阈值 = 30
私有变量 isLandScape = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mOrientationEventListener = object : OrientationEventListener(context) {
override fun onOrientationChanged(orientation: Int) {
isLandScape = isLandscape(orientation)
}
}
mOrientationEventListener!!.enable()
}
private fun isLandscape(orientation: Int): Boolean {
return orientation >= 90 - THRESHOLD && orientation <= 90 + THRESHOLD || orientation >= 270 - THRESHOLD && orientation <= 270 + THRESHOLD
}
override fun onDestroy() {
super.onDestroy()
mOrientationEventListener!!.disable()
}
根据 landscape/portrait 模式,您可以通过 setRotation 属性 旋转视图。
正确答案是从清单中删除 android:configChanges,并正确处理正在重启的 activity。有一些技术可以解决您可能遇到的所有问题,除了旋转变化之外,还有许多其他因素可能导致它发生。
如果您绝对必须自己处理它,您可以通过覆盖 onConfigurationChanged 并检查是否是方向发生了变化来实现。但你不想那样做。如果您尝试自己做,那么您将拥有因自己不正确地做而导致的所有错误,并且由于您没有正确处理 activity 而未修复的所有错误都会重新启动。所以忘掉这个,从你的清单中删除 configChange,并修复它,这样你就可以处理重启。因为在您这样做之前,您的应用程序将变得一团糟,崩溃报告比您想象的要多。
你可以为此创建新的布局文件,与你的布局同名 并选择 Orientation in available qualifiers。 Android 管理一切。
如果您不想重新创建 activity,则必须使用带方向的 android:configchanges。您将必须在 onConfigurationChanged 方法中以编程方式处理布局。它可能很复杂,因为您不允许系统处理它。您将必须以编程方式设置对齐方式、参数和所有其他结构。您将获得现有纵向模式元素的参考,并且必须自己更改它们的位置和其他内容。