2011-01-23 17 views
5

Nella mia attività di Android Come aggiungere a livello di codice, ho creare una vista personalizzata che si estende SurfaceView (usando MonoDroid così lievi variazioni nella sintassi):Android: pulsante per visualizzare

class FriendsView : SurfaceView 
{ 
    ... 

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

     ... create my custom view ... 

    } 


} 

Nella mia classe di attività, ho impostato il Visualizzare il contenuto alla vista:

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); 

} 

voglio aggiungere un pulsante per la vista, ma non si può capire come fare questo. Tutto ciò che ho letto inizia dal punto di vista del main.xml, ma non vedo come usarlo per dichiarare un pulsante che è visibile nella mia vista. Allo stesso modo, non riesco a trovare un metodo nelle classi Activity o View che mi consente di aggiungere un oggetto Button in modo programmatico.

Sono sicuro che mi manca qualcosa concettualmente, ma gradirei qualsiasi aiuto per farmi andare nella giusta direzione.

+0

Spiacente, dove hai preso il tuo costruttore 'ViewGroup.LayoutParams' con questo prototipo? – Dims

+0

È possibile trovare la risposta giusta [qui] (http://stackoverflow.com/a/7679516/828728). – yugidroid

risposta

10

Se ho capito bene, vedi i tuoi amici, guarda bene, ma vuoi aggiungere un pulsante? Non so che tipo di View è il tuo FriendsView, ma assumendo che sia qualcosa a cui puoi aggiungere childs (come un linearLayout o qualcosa del genere), dovresti essere in grado di farlo (solo dalla cima della mia testa)

//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); 

Se c'è qualche altro elemento in friendsView si desidera aggiungere un bambino, è possibile trovare solo utilizzando findViewById() (aggiungere iD alle tue elementi, se si vuole trovare loro come questo)

+0

Ciao, Nanne - sì, è vero. Il mio punto di vista sta funzionando bene, ma voglio aggiungere alcune funzionalità ad esso che comporta l'aggiunta di un pulsante. – user304582

+0

Quindi suggerirei la funzione addView :) – Nanne

+1

Ho provato il tuo suggerimento, ma non ho un metodo addView nella mia vista personalizzata (estende SurfaceView). SurfaceViews non supporta i pulsanti? – user304582

4

a SurfaceView può non avere childs, solo le Views basate su un ViewGroup possono (LinearLayout, RelativeLayout, ...) Immagino che tu voglia usare un LinearLayout per il tuo ContentView(), o piuttosto un RelativeLayout (se Il pulsante e dovrebbe essere "dentro" il SurfaceView). Per LinearLayout, devi curare l'orientamento del layout (setOrientation()), per RelativeLayout devi prestare molta attenzione ai LayoutParam dei childs che definiranno le relative coordinate/posizioni dei child all'interno di RelativeLayout.

Il meglio sarebbe se si gonfia tutto da XML. Puoi anche gonfiare le tue "proprie" viste usando il nome completo della classe nel file XML. Non c'è praticamente bisogno di mettere insieme un ContentView da solo.