Я не хотел бы воскрешать старые темы, но это проблема, на которую нет правильного ответа, и более того, я сам столкнулся с этой проблемой.
Вот длинный кусок, если вам интересен только ответ, пожалуйста, прокрутите весь код до кода:
Android: гравитация и Android: layout_gravity работает по-разному. Вот статья, которую я прочитал, которая помогла мне.
Суть статьи: гравитация влияет на вид после того, как высота / ширина назначены. Таким образом, центр тяжести не повлияет на вид, который выполняется FILL_PARENT (думайте об этом как об автоматическом поле). Центр layout_gravity БУДЕТ влиять на представление, которое является FILL_PARENT (думайте об этом как о автопэде).
По сути, Android: layout_gravity не может быть доступен программно, только Android: гравитация. В случае с ОП и в моем случае принятый ответ не размещает кнопку вертикально по центру.
Чтобы улучшить ответ Karthi:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
button.setLayoutParams(params);
Ссылка на LinearLayout.LayoutParams
.
android: layout_gravity показывает «Нет связанных методов», что означает, что нельзя получить доступ программно. В то время как гравитация - это поле в классе.