Autore Topic: Layout params da XML  (Letto 808 volte)

Offline Trio87

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
Layout params da XML
« il: 27 Dicembre 2011, 19:59:40 CET »
0
Ciao a tutti sono nuovo del forum (e direi anche di android).
Nell'applicazione che sto sviluppando devo aggiungere dinamicamente al layout di un fragment un numero di oggetti non conosciuto a priori. La mia domanda è: posso "importare" i parametri di layout per il mio oggetto (ad esempio un button) da un xml?

Spero di essere più chiaro con questo esempio:

nel metodo onCreateView del fragment ho
Codice (Java): [Seleziona]
LinearLayout mainLayout = findViewById(R.id.mainLayout);
for(int i=0; i<buttonsNumber; i++){
    mainLayout.addView(new MyButton(context) );
}

Ho l'xml my_button_layout.xml
Codice (XML): [Seleziona]
<Button
android:layout_height:"wrap_content"
android:layout_width:"wrap_content"
android:background:"#ffeeeeee"
android:textStyle="bold" />

MyButton è una classe che estende button
Codice (Java): [Seleziona]
public class MyButton extends Button{

    public MyButton(Context context){
        super(context);
        //vorrei che prendesse i parametri di layout da my_button_layout.xml
    }

}

È possibile far prendere i parametri di layout (come layout_height, background o textStyle) dall'xml invece che settare tutto con delle setLayoutParameters() e compagnia??

Grazie in anticipo a tutti.

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Layout params da XML
« Risposta #1 il: 27 Dicembre 2011, 20:49:35 CET »
0
Hai provato una cosa del genere?

Codice (Java): [Seleziona]
LinearLayout mainLayout = findViewById(R.id.mainLayout);
for(int i=0; i<buttonsNumber; i++){
    Button button = LayoutInflater.from(this).inflate(R.layout.my_button_layout, null);
    mainLayout.addView(button);
}

Offline Trio87

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
Re:Layout params da XML
« Risposta #2 il: 28 Dicembre 2011, 09:41:35 CET »
0
@Ricky
Inanzitutto grazie per la risposta.

Inizialmente avevo usato il LayoutInflater anche io, ma purtroppo ho dovuto cambiare strada in quanto quei button stavano diventando decisamente troppo complessi per essere gestiti senza una classe apposita...in pratica è più semplice per me costruire il layout con delle set piuttosto che gestire tutto il resto (parametri associati, listener, callback, ...) senza una classe.

Ovviamente se fosse possibile prendere i parametri di layout da XML sarebbe la soluzione ottimale per me...

Offline Trio87

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
Re:Layout params da XML
« Risposta #3 il: 28 Dicembre 2011, 11:58:44 CET »
0
Sto provando ora usando l' AttributeSet ma non mi funziona....posto il codice

Codice (Java): [Seleziona]
XmlPullParser parser = getResources().getXml(R.layout.my_button_layout.xml);
AttributeSet attributes = Xml.asAttributeSet(parser);
LinearLayout mainLayout = findViewById(R.id.mainLayout);
for(int i=0; i<buttonsNumber; i++){
    mainLayout.addView(new MyButton(context, attributes) );
}

my_button_layout.xml è sempre lo stesso.

MyButton è diventato:
Codice (Java): [Seleziona]
public MyButton(Context context, AttributeSet attributes){
    super(context, attributes);
}

...ma è come se non gli passassi l' AttributeSet...

Qualcuno ha già percorso questa strada e sa cosa sto sbagliando?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Layout params da XML
« Risposta #4 il: 28 Dicembre 2011, 11:59:23 CET »
0
Nell'xml my_button_layout.xml potresti mettere direttamente la tua classe:

Codice (XML): [Seleziona]
<il.tuo.package.MyButton
android:layout_height:"wrap_content"
android:layout_width:"wrap_content"
android:background:"#ffeeeeee"
android:textStyle="bold" />

E poi fare l'inflate come ti ho suggerito prima (anzi, in questo modo che è meglio):

Codice (Java): [Seleziona]
LinearLayout mainLayout = findViewById(R.id.mainLayout);
LayoutInflater inflater = LayoutInflater.from(this);
for(int i=0; i<buttonsNumber; i++){
    Button button = inflater.inflate(R.layout.my_button_layout, null);
    mainLayout.addView(button);
}

Offline Trio87

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
Re:Layout params da XML
« Risposta #5 il: 28 Dicembre 2011, 13:17:08 CET »
0
Wow...dall'alto della mia ignoranza non sapevo di poter mettere le mie classi nell'xml.
Grazie mille Ricky!