Chiamare addView
è la risposta corretta, ma è necessario fare un po 'di più per farlo funzionare.
Se si crea una visualizzazione tramite un costruttore (ad esempio, Button myButton = new Button();
), avrete bisogno di chiamare setLayoutParams
sulla vista di nuova costruzione, passando in un'istanza di LayoutParams della vista genitore classe interna, prima di aggiungere il vostro bambino di nuova costruzione alla vista genitore.
Ad esempio, si potrebbe avere il seguente codice nel tuo onCreate()
funzione supponendo che il LinearLayout ha id R.id.main
:
LinearLayout myLayout = findViewById(R.id.main);
Button myButton = new Button(this);
myButton.setLayoutParams(new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT));
myLayout.addView(myButton);
Facendo in modo di impostare i LayoutParams è importante. Ogni vista richiede almeno un parametro layout_width e un layout_height. Anche ottenere la giusta classe interiore è importante. Ho fatto fatica a ottenere visualizzazioni aggiunte a un TableRow per visualizzarle correttamente finché non ho capito che non stavo passando un'istanza di TableRow.LayoutParams al setLayoutParams della vista figlia.
fonte
2010-03-07 20:36:46
Come ti creare il progra vista mmaticamente ma utilizzando un file di layout XML che hai specificamente scritto per questa nuova vista? – SK9
@ SK9 Si utilizzerà un LayoutInflater, che è possibile ottenere da un contesto, in genere l'attività corrente. Qualcosa come: LayoutInflater myInflater = getLayoutInflater; Visualizza myView = myInflater.inflate (R.layout.myLayout, parent, false); –
In realtà getLayoutInflater() deriva dalla classe Window (non da Context) ed è un metodo di convenienza in Activity. –