2011-01-23 4 views
5

В моей Android деятельности добавить, создать пользовательский вид, который простирается SurfaceView (используя MonoDroid так незначительные изменения в синтаксисе):Android: Как программно кнопка для просмотра

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 программно.

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

+0

Извините, где вы взяли ваш конструктор 'ViewGroup.LayoutParams' с таким прототипом? – Dims

+0

Вы можете найти свой ответ правильно [здесь] (http://stackoverflow.com/a/7679516/828728). – yugidroid

ответ

10

Если я правильно понял, вы видите, что ваш friendView просто замечательный, но вы хотите добавить к нему кнопку? Я не знаю, что это за просмотр вашего FriendsView, но если предположить, что вы можете добавить детей (например, 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() (добавить идентификаторы ваших элементов, если вы хотите, чтобы найти их, как это)

+0

Привет, Нанн - да, это так. Мой взгляд работает отлично, но я хочу добавить к нему некоторые функции, которые включают добавление кнопки. – user304582

+0

Итак, я бы предложил функцию addView :) – Nanne

+1

Я попробовал ваше предложение, но у меня нет метода addView в моем пользовательском представлении (он расширяет SurfaceView). У SurfaceViews не поддерживаются кнопки? – user304582

4

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

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

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