Monodroid: программно добавлять пользовательские элементы управления в макет с горизонтальным и вертикальным центрированием - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть ImageView внутри RelativeLayout, который я добавил программно (ImageView добавляется кодом, а не RelativeLayout.)

Если бы я добавил ImageView с помощью XML, я бы сделал это:
андроид: layout_width = "wrap_content"
андроид: layout_height = "wrap_content"
андроид: layout_centerHorizontal = "истинный"
андроид: layout_centerVertical = "истинный"
андроид: SRC = "@ вытяжка / ImageFileName"
Android: видимость = "невидимый"
/>

Но теперь я хочу, чтобы это было сделано программно. Как правильно настроить центрирование? Я попытался создать RelativeLaout.Parameters, но когда я создаю их, используя

RelativeLayout.LayoutParams p = new RelativeLayout.LayoutParams(this, null);  //[1]
p.AddRule(...);[2]

В строке 1 выдается исключение. Кроме того, я не знаю, как применить эти LayoutParameters к ViewGroup.LayutParameters.

Кроме того, я не могу просто сделать ViewGroup.LayoutParameters, потому что
1. В них нет нужных мне центрирующих (горизонтальных и вертикальных) элементов.
2. Кажется, что каждый пример указывает, что есть конструктор, который просто принимает Layout_Width и Layout_Height в качестве параметров, но это не так.

Прежде чем кто-то скажет сначала добавить макет, расскажите, пожалуйста, как центрировать макет в коде. Спасибо.

Пожалуйста, помогите.

1 Ответ

3 голосов
/ 20 декабря 2011

Способ сделать это прост:

Создайте xaml, который вы хотите, просто из компонента - поместите файл в папку макета.

Затем воспользуйтесь сервисом надувания, чтобы накачать элемент управления внутри нужного вам кода (обязательно создайте LayoutInflator следующим образом):

LayoutInflater _inflatorservice = (LayoutInflater)this.GetSystemService(Context.LayoutInflaterService);

Тогда просто назовите это:

_inflatorservice.Inflate(Resource.Layout.[control], parent);

а Боб брат твоей матери!

...