Eu odiaria ressuscitar threads antigos, mas esse é um problema que não foi respondido corretamente e, além disso, eu mesmo me deparei com esse problema.
Aqui está o passo longo, se você estiver interessado apenas na resposta, role até o código:
android: gravidade e android: layout_gravity funciona de maneira diferente. Aqui está um artigo que li que me ajudou.
GIST do artigo: a gravidade afeta a vista depois que a altura / largura é atribuída. Portanto, o centro de gravidade não afetará uma exibição concluída FILL_PARENT (pense nela como margem automática). O layout_gravity center afetará a exibição que é FILL_PARENT (pense nela como auto pad).
Basicamente, android: layout_gravity NÃO PODE ter acesso programaticamente, apenas android: gravidade. No caso do OP e no meu caso, a resposta aceita não coloca o botão verticalmente no centro.
Para melhorar a resposta de Karthi:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
button.setLayoutParams(params);
Link para LinearLayout.LayoutParams
.
android: layout_gravity mostra o significado "Nenhum método relacionado" não pode ser acessado programaticamente. Considerando que a gravidade é um campo na classe.