Я пишу код внутри, чтобы настроить несколько элементов в моей ViewGroup (пользовательской) до того, как на экран будет положен макет.
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
super.onLayout(changed, left, top, right, bottom)
if (!isLaidOut) {
layoutSetup() //where i setup UI when layout is laid out for first time
//or when configuration is changed
}
}
На устройстве Изменение конфигурации выше Код работает нормально на устройстве Samsung(подправленный Android) и layoutSetup () вызывается один раз. НЕТ проблемы.
НО
ИСПОЛЬЗОВАНИЕ:
На конфигурации устройства Изменение в приведенном выше коде layoutSetup () вызывается несколько раз в пикселях Google (и других стандартных телефонах Android). Почему этот вызов конкретного устройства?
Проблема возникает, когда конфигурация изменяется с ландшафт ( с клавиатурой на экране ) на портрет isLaidOut вызывается дважды и точка, в которой islaidOut установлена на true при отладке макета не отображается на экране. (это происходит при следующем обратном вызове onLayout, но isLaidOut == true)
Вопрос:
- Когда установлено значение isLaidOut?
- Как можно решить ту же проблему другим способом?
Как сделать View разумным при изменении конфигурации?Я не могу использовать обратный вызов ниже, так как у меня другой макет для конфигурации (земля / порт)
override fun onConfigurationChanged(newConfig: Configuration?) {
super.onConfigurationChanged(newConfig)
}
ПРИМЕЧАНИЕ. Я пытался использовать view.post () и не смог разрешитьПроблема и метод post не являются предпочтительными, так как я хочу больше контроля над потоком кода.И есть только один конкретный вариант использования, имеющий проблему, другие работают нормально
android: windowSoftInputMode = "AdjustResize", объявленный в моем манифесте активности без него, ошибки нет.