Когда для View set isLaidOut установлено значение True / False?(Андроид) - PullRequest
0 голосов
/ 27 ноября 2018

Я пишу код внутри, чтобы настроить несколько элементов в моей 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)

Вопрос:

  1. Когда установлено значение isLaidOut?
  2. Как можно решить ту же проблему другим способом?
  3. Как сделать View разумным при изменении конфигурации?Я не могу использовать обратный вызов ниже, так как у меня другой макет для конфигурации (земля / порт)

        override fun onConfigurationChanged(newConfig: Configuration?) {
           super.onConfigurationChanged(newConfig)
        }
    

ПРИМЕЧАНИЕ. Я пытался использовать view.post () и не смог разрешитьПроблема и метод post не являются предпочтительными, так как я хочу больше контроля над потоком кода.И есть только один конкретный вариант использования, имеющий проблему, другие работают нормально

android: windowSoftInputMode = "AdjustResize", объявленный в моем манифесте активности без него, ошибки нет.

...