Попробуйте также установить вес макета:
LinearLayout.LayoutParams params =
new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER_HORIZONTAL;
params.weight = 1;
this.addView(block, params);
Это (при условии, что ваша ориентация вертикальная) позволит вашему виду заполнить оставшееся пространство в линейном макете и центрировать его по горизонтали.
Я не думаю, что есть способ иметь дочерний элемент представления меньший, чем содержащая его ячейка LinearLayout.Если представление меньше, чем его «ячейка», то LinearLayout будет уменьшен, чтобы вместить его.Если вес макета приводит к росту «ячейки», то также увеличивается и содержимое представления.
Если вы действительно хотите, чтобы представление было меньше своей «ячейки» и центрировалось, оберните его в FrameLayout.Тогда вы сможете использовать центр тяжести для вашего сердца.layout_width = "fill_parent" В xml (я знаю, что вы не можете использовать это напрямую, но это проще объяснить таким образом):
<LinearLayout orientation="vertical">
<FrameLayout layout_weight="1" layout_height="wrap_content">
<View layout_gravity="center" layout_{width,height}="wrap_content"/>
</FrameLayout>
... other views ...
</LinearLayout>
Непомеченные атрибуты макета - "fill_parent".