Autore Topic: Creare un Button da codice  (Letto 1887 volte)

vincenzodicicco

  • Visitatore
Creare un Button da codice
« il: 01 Luglio 2010, 20:21:32 CEST »
0
Salve forum!!come da titolo, vorrei chiedervi se è possibile creare un Button, un EditText o un altro widget, ma non nell'xml ma da codice.
Ho il bisogno di creare un N numero di pulsanti con dentro un immagine contenuta in un array di Drawable. Consigli in merito? Grazie a tutti  :-)

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
  • Respect: +13
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Re:Creare un Button da codice
« Risposta #1 il: 01 Luglio 2010, 21:59:11 CEST »
0
Per dirla in breve: qualsiasi elemento che ha un tag nell'XML, ha un metodo corrispettivo nel codice Java, in Android. La procedura "standard" per creare un componente GUI in un'Activity, infatti, è istanziare un oggetto e successivamente importarne l'handle dal file XML:
Codice (Java): [Seleziona]
Button button = (Button) findViewById(R.id.button_id);
Ma nulla vieta di fare la cosa più naturale in Java:
Codice (Java): [Seleziona]
Button button = new Button(getApplicationContext);
Per maggiorni info sui metodi utilizzabili dalla classe Button (ricordo che eredita da View), guarda pure QUI.

Si intende che al momento della creazione dinamica, devi provvedere tu alla locazione nello spazio del bottone, ricordando sempre che ogni attributo XML ha un corrispettivo metodo Java. Non ho dimestichezza con gli array di Drawable ma penso che per settare l'immagine "dentro" al bottone, ti basta QUESTO metodo:
Codice (Java): [Seleziona]
setBackgroundDrawable(Drawable d);ti ricordo però che questo setta l'immagine come sfondo del pulsante, per cui se esso è più grande della tua immagine, questa verrà "stretchata".

Alternativamente ti consiglio un workaround: setta come trasparente il background del bottone:
Codice (Java): [Seleziona]
setBackgroundColor (null); e poi aggiungi al bottone l'immagine (purtroppo i metodi di aggiunta di Drawable sono disponibili solo per i 4 punti cardinali, io uso Bottom qui...):
Codice (Java): [Seleziona]
setCompoundDrawablesWithIntrinsicBounds (Drawable left, Drawable top, Drawable right, Drawable TUA_IMMAGINE)Per capire più o meno cosa faccio in quest'ultimo passaggio, leggiti questo OTTIMO tutorial di JD sull'argomento (spiega come fare in XML, io ti ho dato il metodo Java per farlo)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Creare un Button da codice
« Risposta #2 il: 01 Luglio 2010, 22:02:18 CEST »
0
Vedo che ScarfaceIII ha già risposto, ma dato che ne frattempo mi son messo a buttar giù un po' di codice lo posto comunque :D

Codice (Java): [Seleziona]
        static final int DIM_ARRAY=5;
        ImageButton[] buttons;
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
               
                LinearLayout ll = (LinearLayout)findViewById(R.id.LinearLayout01);
                buttons = new ImageButton[DIM_ARRAY];
                for(int i=0;i<DIM_ARRAY;i++){
                        buttons[i] = new ImageButton(this);
                        buttons[i].setImageResource(R.drawable.icon);
                        ll.addView(buttons[i]);
                }

In genere faccio tutto tramite XML quindi non posso garantirti che sia questo il modo migliore/più pulito per farlo, dovrebbe comunque funzionare ;)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
  • Respect: +13
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Re:Creare un Button da codice
« Risposta #3 il: 01 Luglio 2010, 22:05:20 CEST »
0
va beh ma tu hai imbrogliato!  :-(
non vale usare gli ImageButton! uffy... :-P

ottimo consiglio  ;-)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Creare un Button da codice
« Risposta #4 il: 01 Luglio 2010, 22:06:52 CEST »
0
Ho il bisogno di creare un N numero di pulsanti con dentro un immagine contenuta in un array di Drawable.

Beh, non hai mica scritto che oltre all'immagine ci volevi pure del testo :D.
Comunque puoi facilmente modificare il mio codice seguendo i suggerimenti di ScarfaceIII ;).
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Creare un Button da codice
« Risposta #5 il: 01 Luglio 2010, 22:15:36 CEST »
0
Così va meglio?

Codice (Java): [Seleziona]
        static final int DIM_ARRAY=5;
        Button[] buttons;
       
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
               
                LinearLayout ll = (LinearLayout)findViewById(R.id.LinearLayout01);
                buttons = new Button[DIM_ARRAY];
                for(int i=0;i<DIM_ARRAY;i++){
                        buttons[i] = new Button(this);
                        buttons[i].setText("Button "+(i+1));
                        buttons[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(R.drawable.icon), null, null);
                        ll.addView(buttons[i]);
                }
        }
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline ScarfaceIII

  • Utente junior
  • **
  • Post: 112
  • Respect: +13
    • raferalston12
    • Mostra profilo
  • Dispositivo Android:
    Nexus One
  • Sistema operativo:
    GNU/Linux, Ubuntu 10.04 / Windows 7
Re:Creare un Button da codice
« Risposta #6 il: 01 Luglio 2010, 22:36:02 CEST »
0
ma va! ma stai scherzando?! il mio era puro rosik perché la tua soluzione era migliore...  :-P :-P :-P non avendo interagito con gli image button (fatto male: mi è balenato in testa che un pulsante della mia applicazione l'avrei potuto fare così e domani ho la consegna del progetto...) non mi sono venuti in mente e sono rimasto "sul generale", ma nel caso chiesto dal buon vincenzo, andavano bene i consigli generali che ho scritto, ma il codice migliore era il tuo  ;-)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:Creare un Button da codice
« Risposta #7 il: 01 Luglio 2010, 22:39:39 CEST »
0
va beh ma tu hai imbrogliato!  :-(
non vale usare gli ImageButton! uffy... :-P

ottimo consiglio  ;-)
LOL
Non mi ero accorto che il post era il tuo, mi sembrava scritto da vincenzo (infatti nel mio messaggio mi rivolgevo a lui e non a te xD).

Sorry, sono cotto, ho ripreso ad uscire in MTB oggi e sono stanco morto e tutto dolorante :P.
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

vincenzodicicco

  • Visitatore
Re:Creare un Button da codice
« Risposta #8 il: 03 Luglio 2010, 01:17:06 CEST »
0
Uff c'ero quasi creavo ed istanziavo tutto correttamente, ma non effettuavo l'addView al layout!Siete unici un ringraziamento a JD e ScarfaceIII  :-)