Как применить изменения ориентации экрана если configChanges="orientation"?
Есть активити для которого в манифесте указаны такие параметры
...
<application>
...
<activity
android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true">
</activity>
...
</application>
...
то есть по сути фрагменты сидящие в этом активити не пересоздается при повороте экрана, а используется существующий.
Проблема с на данный момент в том, что для разной ориентации экрана должны быть применены разные значения для Guideline, то есть у меня значения для sw-600dp и для sw-600dp-land разные и проблема в том, что из за того, что при повороте экрана UI не пересоздается в данном фрагменте, то при повороте экрана значения не меняются.
Вопрос, есть ли какой то способ обновить UI если configChanges="orientation указан для активити?
P.S. Я понимаю, что можно удалить этот параметр из манифеста, но тогда прийдется рефакторить много кода который уже работает так.
Ответы (1 шт):
В итоге я сделал это таким образом
class MyFragment() {
...
private val leftDynamicGuideLinePercentageOffset: Float
get() {
val outValue = TypedValue()
resources.getValue(R.dimen.guideline_left, outValue, true)
return outValue.float
}
private val rightDynamicGuideLinePercentageOffset: Float
get() {
val outValue = TypedValue()
resources.getValue(R.dimen.guideline_right, outValue, true)
return outValue.float
}
//Since this fragment related to the activity which is block UI recreate on config change, it is necessary to support it programmatically.
private fun setLeftDynamicGuideLineOffset(percentage: Float) {
val guideLine: Guideline = requireView().findViewById(R.id.verticalGuidelineLeft)
val params: ConstraintLayout.LayoutParams = guideLine.layoutParams as ConstraintLayout.LayoutParams
params.guidePercent = percentage
guideLine.layoutParams = params
}
//Since this fragment related to the activity which is block UI recreate on config change, it is necessary to support it programmatically.
private fun setRightDynamicGuideLineOffset(percentage: Float) {
val guideLine: Guideline = requireView().findViewById(R.id.verticalGuidelineRight)
val params: ConstraintLayout.LayoutParams = guideLine.layoutParams as ConstraintLayout.LayoutParams
params.guidePercent = percentage
guideLine.layoutParams = params
}
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
setLeftDynamicGuideLineOffset(percentage = leftDynamicGuideLinePercentageOffset)
setRightDynamicGuideLineOffset(percentage = rightDynamicGuideLinePercentageOffset)
}
...