Android – добавление вида программно игнорирует некоторые атрибуты стиля

Я добавляю кнопку программно в мой существующий вид Android, когда пользователь нажимает другую кнопку. Он работает с точки зрения функциональности, но часть информации о стиле, похоже, игнорируется.

Я добавляю кнопку, имея отдельный макет, содержащий только кнопку, со значением стиля, предварительно заполненным.

<Button xmlns:android="http://schemas.android.com/apk/res/android" style="@style/FileStorageDeleteButton"></Button>

Используя getLayoutInflater , я могу добавить эту кнопку в макет.

buttonDelete = (Button) getLayoutInflater().inflate(R.layout.pete_button_filedelete, null);

LinearLayout layout = (LinearLayout)findViewById(R.id.layoutFileStorage);

layout.addView(buttonDelete, 1);

У меня есть файл XML в каталоге значений, который устанавливает цвет, текст и т. Д. Для @style/FileStorageDeleteButton , большинство из которых используются кнопкой при ее добавлении. Но по какой-то причине четыре атрибута margin и layout_below игнорируются.

Я не получаю ошибок в LogCat, когда появляется эта кнопка, похоже, что стиль просто не применяется. Если я включу кнопку вручную в XML для этого макета, он успешно использует все стили.

Любая помощь очень ценится.

Вам необходимо передать параметры макета при вызове addView() поскольку параметры макета не имеют отношения к одному виду, они всегда принимаются в контексте окружающего представления . Существуют варианты addView() которые принимают аргумент LayoutParams .

EDIT Добавить более подробную информацию

Вы должны создать набор LinearLayout.LayoutParams и установить свои поля там, а затем передать это в addView()

layout_below в LinearLayout случае игнорируется для LinearLayout (этот атрибут применим только для RelativeLayout . Когда вы вызываете addView(buttonDelete, 1) вы говорите, где разместить представление в линейном макете.