Все размеры становятся доступными только после того, как завершится подготовка лэйаута для отображения на экране.
Вы получаете 0, потому что пытаетесь работать с размерами раньше времени.
Использование postDelayed - это костыль, который может сработать невовремя на каком-нибудь медленном девайсе и вы опять получите 0.
В Kotlin extensions есть doOnLayout. Он вызывается вовремя.