Odiaría resucitar viejos hilos, pero este es un problema que no se responde correctamente y, además, me he encontrado con este problema.
Aquí está la parte larga, si solo está interesado en la respuesta, desplácese hasta el código:
android: gravity y android: layout_gravity funciona de manera diferente. Aquí hay un artículo que he leído que me ayudó.
GIST del artículo: la gravedad afecta la vista después de que se asigna la altura / anchura. Por lo tanto, el centro de gravedad no afectará una vista que se realiza FILL_PARENT (piense en ello como margen automático). layout_gravity center afectará la vista que es FILL_PARENT (piense en ello como auto pad).
Básicamente, android: layout_gravity NO PUEDE tener acceso mediante programación, solo android: gravity. En el caso del OP y en mi caso, la respuesta aceptada no coloca el botón verticalmente en el centro.
Para mejorar la respuesta de Karthi:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
button.setLayoutParams(params);
Enlace a LinearLayout.LayoutParams
.
android: layout_gravity muestra "No hay métodos relacionados", lo que significa que no se puede acceder programáticamente. Mientras que la gravedad es un campo en la clase.