2012-09-14 13 views
7

Ho un LinearLayout che contiene un TextView e lo sarà sempre. Ci sarà sempre almeno un pulsante situato sotto il TextView, ma potrebbero essercene più di uno in determinate circostanze.Creare pulsanti Android a livello di programmazione utilizzando il layout XML come modello

Posso creare e aggiungere correttamente tutti i pulsanti di cui ho bisogno a livello di programmazione. Posso anche impostare con successo tutti i parametri/opzioni relativi all'aspetto che richiedo per questi pulsanti a livello di codice.

Il problema è che non so come dire a un pulsante creato in modo programmatico che dovrebbe utilizzare un file di risorse XML, che contiene i parametri di aspetto e layout, invece di impostare questi parametri a livello di codice.

Ho esaminato domande con nomi simili e ho trascorso del tempo a fare scherzi con l'API stessa, senza alcun risultato.

Edit:
Ecco un'approssimazione di quello che sto cercando di fare che, si spera fare spiegazioni un po 'più chiare per me:

private TextView textView; 
private SomeObject someObject; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
    Bundle savedInstanceState) { 
    View scrollView = inflater.inflate(R.layout.fragment_play_game, container, false); 
    textView = (TextView) scrollView.findViewById(R.id.game_data_text); 
    textView.setText(someObject.getTextForTextView()); 

    LinearLayout layout = (LinearLayout) scrollView.findViewById(R.id.game_data_container); 
    for (String optionText : someObject.getTextForButtons()) { 
     layout.addView(createOptionButton(optionText, layout)); 
    } 
    return scrollView; 
} 

private View createOptionButton(String optionText, LinearLayout layout) { 
    Button optionButton = new Button(this.getActivity()); 
    // set button layout/options here, somehow?? 
    optionButton.setText(optionText); 
    return optionButton; 
} 

mio file di layout XML per il frammento si presenta così (è questo LinearLayout che sto cercando di aggiungere pulsanti a):

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/game_data_container" 
     etc... > 

     <TextView 
      android:id="@+id/game_data_text" 
      etc... /> 

    </LinearLayout> 

</ScrollView> 

Inoltre, se sono di creare un file di layout XML per il pulsante (permette di chiamare custom_button.xml) dovrebbe essere simile a questo ?:

<?xml version="1.0" encoding="utf-8"?> 
    <Button xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/play_game_option_button" 
     etc... /> 

Aggiornamento:
Tanto per espandere un po 'su quello che MrFox @ sta parlando, quello che ho fatto per farlo funzionare è stato sostituire questa linea:

Button optionButton = new Button(this.getActivity()); 

con questo:

Button optionButton = (Button) inflater.inflate(R.layout.play_game_option_button, layout, false); 

... che gonfia un file xml contenente solo un layout di pulsante (il modello di pulsante). In questo caso, restituisce la vista radice di quel file, che è solo il pulsante perché non c'è un genitore sopra il pulsante nel file.

Tuttavia, se avessi impostato l'ultimo valore booleano (attachToParent) su true, avrebbe restituito il contenitore radice in cui si troverà il pulsante (che è solo la variabile 'layout' che è stata passata nella chiamata) .

Ora posso produrre tutti i pulsanti che desidero utilizzando questo modello.

risposta

5

Hai mai pensato di creare un layout che fosse solo il pulsante con gli stili XML applicati e quindi di gonfiarlo nel layout lineare?

qualcosa di simile:

inflater.inflate (R.layout.StyledButton, MyLinearLayout, true);

+1

Grazie per la risposta, ho provato a giocare con ciò che il vostro suggerendo, ma io non capisco come implementare ciò che stai suggerendo. Ho aggiornato la mia domanda originale con maggiori informazioni. – Rob

+0

io e te entrambi –

+0

Grazie a @Rob per espandere la mia risposta! –

1

XML per il pulsante sotto /res/layout/my_button_layout.xml

<Button xmlns:android="http://schemas.android.com/apk/res/android" 
    ... /> 

codice nel tuo attività

myButton = (Button)inflate.inflate(R.layout.my_button_layout, null); 
myView.addView(myButton); 
Problemi correlati