2013-03-22 3 views
5

Я добавляю кнопку программно в свой существующий вид 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, большинство из которых используется с помощью кнопки, когда он добавил , Но по какой-то причине четыре атрибута поля и layout_below игнорируются.

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

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

ответ

3

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

EDIT Добавить больше деталей

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

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

+0

Спасибо Дэвиду - ваше сообщение отправило меня в правильном направлении, чтобы найти, что я могу p осел больше переменных в раздувание. Теперь используйте 'buttonDelete = (Button) getLayoutInflater(). Inflate (R.layout.pete_button_filedelete, layout, false);', хотя 'layout_below' по-прежнему игнорируется. Я могу обойти это, но просто интересно, почему этот еще не работает? Еще раз спасибо! Если бы у меня была репутация для вас, я бы :) –

+0

'layout_below' используется только для' RelativeLayout'. Ваш 'LinearLayout' игнорирует этот атрибут. В «LinearLayout» вы можете контролировать выше/ниже, используя позицию «Вид» в макете. –

Смежные вопросы