Android: Как программно добавить кнопку для просмотра - PullRequest
6 голосов
/ 23 января 2011

В своей деятельности на Android я создаю пользовательское представление, расширяющее SurfaceView (с использованием MonoDroid, поэтому небольшие изменения в синтаксисе):

class FriendsView : SurfaceView
{
    ...

    public FriendsView(Context context) : base(context)
    {

        ... create my custom view ...

    }


}

В своем классе «Активность» я настроил представление содержимого на представление:

protected override void OnCreate(Bundle bundle)
{

    base.OnCreate(bundle);

    ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.FillParent);

    FriendsView friendsView = new FriendsView(this);

    SetContentView(friendsView, layoutParams);

}

Я хочу добавить кнопку в представление, но не могу понять, как это сделать. Все, что я прочитал, начинается с точки зрения main.xml, но я не вижу, как использовать это, чтобы объявить кнопку, которая видна на мой взгляд. Точно так же я не могу найти метод в классах Activity или View, который позволяет мне добавлять объект Button программно.

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

Ответы [ 2 ]

12 голосов
/ 23 января 2011

Если я правильно понимаю, вы видите своих друзей. Просто отлично, но вы хотите добавить к нему кнопку? Я не знаю, что такое View your FriendsView, но если предположить, что это то, к чему вы можете добавить childs (например, linearLayout или что-то еще), вы должны быть в состоянии сделать это (прямо из головы)

 //assuming you have a friendsView object that is some sort of Layout.
 Button yourButton = new ImageButton(this);
 //do stuff like add text and listeners.

 friendsView.addView(yourButton);

Если в friendsView есть какой-то другой элемент, к которому вы хотите добавить дочерний элемент, вы можете просто найти его, используя findViewById() (добавьте идентификаторы к своим элементам, если вы хотите их найти таким образом)

4 голосов
/ 24 января 2011

SurfaceView не может иметь дочерние элементы, только представления, основанные на ViewGroup, могут (LinearLayout, RelativeLayout, ...) Я предполагаю, что вы хотите использовать LinearLayout для вашего ContentView (), или, скорее, RelativeLayout (если кнопка должна быть «внутри» SurfaceView). Для LinearLayout вы должны позаботиться об ориентации макета (setOrientation ()), а для RelativeLayout вы должны позаботиться о LayoutParams дочерних элементов, которые будут определять относительные координаты / позиции дочерних элементов в RelativeLayout. *

Лучше всего будет, если вы накачаете все из XML. Вы также можете раздувать свои «собственные» представления, используя полное имя класса в файле XML. По сути, нет необходимости создавать ContentView самостоятельно.

...