Есть ли какое либо "красивое" решение подобной задачи?
Есть, создать свой кастомный View, внутри которого скрыть всю это не радующую глаз логику.
Поверьте мне, на самом деле костылей в вашем коде гораздо больше. Если вы хоть раз печатали findViewById пальцами по клавиатуре, то это тоже костыль по сравнению с кое-чем. Да, есть такая параллельная вселенная, где это делается автоматически))
Так что, надо расставлять приоритеты, и смотреть на вещи реально, потому что все костыли сразу - не победить.