Почему xml для android такой ужасный на вид и есть ли альтернативы?
В андроиде параметры с префиксом layout_ используются "родительской" вью(т.е. объемлюшим ViewGroup, например Linear/Relative/FrameLayout) для того, чтобы правильно расположить вью. Они хранятся в LayoutParams, это отдельный класс, свой для каждого ViewGroup. Например, в CoordinatorLayout.LayoutParams есть layout_behaviour - задаёт поведение для этой вью.
А параметры без такого префикса используются самой вью (например, padding - насколько контент отстоит от границ. Родительская вью об этом ничего не знает, ей это не надо).
С философской точки зрения это, конечно, мешанина, но на практике довольно быстро начинаешь фильтровать все эти layout_. 
Альтернатива есть только одна - писать лэйауты в коде, но это плохая идея.
Вполне себе нормальный xml, к нему достаточно быстро привыкаешь. Достойных альтернатив не встречал. На счет layout в названии - это означает, что атрибут будет применен к родительскому контейнеру (если это возможно). К примеру, gravity="right" - означает, что контейнер будет выравнивать свое содержимое по правому краю, layout_gravity же попытается выровнять сам контейнер в родительском элементе