Salve ragazzi, è possibile aggiungere un immagine ad un bottone? Se si, che metodo devo invocare?
Visualizzazione stampabile
Salve ragazzi, è possibile aggiungere un immagine ad un bottone? Se si, che metodo devo invocare?
non so se ho capito quello che ti serve, ma android ha l'ImageButton, in cui imposti android:src="..." da xml o setImageResource(...) da codice
<Button
android:id="@+id/bt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Button + Image"
android:icon="@drawable/image" />
image è l'immagine che vuoi caricare e che devi mettere nella cartella drawable
Così dovrebbe funzionare
Button bt = (Button)findViewById(R.id.button);
bt.setBackgroundResource(R.drawable.nome_immagine) ;
altro problema..la dimensione dell'imagine è troppo grande, come faccio per adattarla al bottone?
Drawable drw = getResources().getDrawable(R.drawable.nome_img);
Bitmap bmp = ((BitmapDrawable) drw).getBitmap();
Drawable drw2 = new BitmapDrawable(Bitmap.createScaledBitmap(bmp, size_x, size_y, true));
bt.setBackgroundResource(drw2) ;
ultima domanda, poi non disturbo più :P esiste un metodo per calcolare la misura dei bottoni?
Così dovrebbe funzionare
Button bt = (Button)findViewById(R.id.button);
bt.getWidth();
bt.getHeight();
nessun disturbo :cool:
appena aggiungo la parte di codice relativa all'assegnazione dell'immagine l'applicazione mi va in crash :'(codice:Button stop=new Button(this);
stop.setText("STOP");
stop.setGravity(Gravity.BOTTOM);
stop.setId(-1);
stop.setOnClickListener(listener);
Drawable drw = getResources().getDrawable(R.drawable.cane);
Bitmap bmp = ((BitmapDrawable) drw).getBitmap();
Drawable drw2 = new BitmapDrawable(Bitmap.createScaledBitmap(bmp, stop.getWidth(), stop.getHeight(), true));
stop.setBackgroundDrawable(drw2) ;
layout.addView(stop);
setContentView(layout);
Se commenti la parte che va da
Drawable drw = getResources().getDrawable(R.drawable.cane);
a
stop.setBackgroundDrawable(drw2) ;
l'app parte?
Fai una prova giusto per curiosità:
in questa funzione
Drawable drw2 = new BitmapDrawable(Bitmap.createScaledBitmap(bmp, stop.getWidth(), stop.getHeight(), true));
al posto di stop.getWidth() e stop.getHeight(), metti due valori fissi.
Soprattutto ho un dubbio su
stop.setId(-1);
prova a mettere un valore maggiore di 1
ho provato a mettere come due valori fissi 10 e 10 e adesso funziona..il setId(-1) non mi da nessun problema..ora mi chiedo, come faccio ad adattare l'immagine al bottone? Faccio stop.setWidth() e stop.setHeight() utilizzando gli stessi numeri? Le dimensioni sono indicate in pixel giusto?
In teoria dovrebbero bastare stop.setWidth() e stop.setHeight(), fai una prova e fammi sapere come va.
Però se fossi in te però, per curiosità farei anche una prova del genere, dopo aver creato il button e prima di Drawable drw2 = new BitmapDrawable(Bitmap.createScaledBitmap(bmp, stop.getWidth(), stop.getHeight(), true)); inserici:
int w = stop.getWidth();
int h = stop.getHeight();
e vedere cosa ti restituiscono
Credo che tu chiami getWidth() e getHeight() troppo presto, il Button non è ancora stato dimensionato.
Sinceramente però non saprei aiutarti su quello (io uso sempre i layout nelle App) forse puoi provare ad impostare tu le dimensioni, ma rischi di avere problemi su device con screen differenti.
Se vuoi provare avendo il codice già in mano aperto a cambiare il Button con l'ImageButton puoi impostargli una immagine (mi pare con setImageResource(R.drawable.cane) nel caso tuo ) e puoi anche impostargli lo ScaleType (setScaleType(ImageView.ScaleType.FIT_XY) dovrebbe fare al caso tuo)
Vedi se ottieni quello che desideri (con i sorgenti aperti dovrebbe essere questione di 5 minuti provare)
ma quindi per dimensionare le immagini mi conviene lavorare nel main.xml, in modo da non avere risultati differenti su dispositivi differenti? se però devo creare 20 bottoni devo scrivere 20 volte il codice per il bottone sia nel file xml che nel file java..giusto?
Se utilizzi il tool grafico non devi scrivere da zero il file .xml, al massimo puoi apportare delle modifiche. Nel file java non devi ricreare il bottone con tutte le sue caratteristiche ma semplicemente modificare quelle che ti interessano.
Se hai 20 bottoni è chiaro che devi creare 20 handler di Button. Al massimo a livello java potresti creare un array di bottoni, ma non ho mai provato a farlo.
nel mio caso, utilizzando solo java ho creato un array di bottoni..se però devo creari 20 bottoni nel file xml e poi associarli ad istanze della classe Button in java poi creare l'array non mi da più nessun vantaggio dato che l'associazione va fatta per ogni oggetto
Una volta che hai effettuato l'associazione puoi continuare comunque a usarli come array, sicuramente fare l'associazione di oggetti creati nel file xml è un pò più lungo...
Ciao, non saprei dirti qual'è il metodo più efficace, io generalmente (per il poco che ho fatto) lavoro nei layout, magari con degli include, cosa che mi permette di definire layout diversi per schermi diversi (o quantomeno differenziare portrait e landscape in maniera comoda).
Secondo me se non usi delle dimensioni fisse puoi riuscirci tranquillamente anche da codice, però io proverei a usare delle imageview o degli imagebutton se devo visualizzare delle immagini (più che altro perchè son fatti apposta per gestire delle immagini)
Per mappare 20 bottoni su un array di Button son 20 righe di codice non di più, vero è che invece la creazione di 20 bottoni potrebbe essere fatta su una funzione all'interno di un ciclo.
Il problema penso stia nel fatto che lavori in pixel e non in dp
ok quindi mi conviene sempre scrivere un po di codice in più, se non trovo di meglio con java :D grazie mille ragazzi!
di nulla...
Salve, spero mi risponda qualcuno siccome la discussione è vecchia.. comunque. devo settare lo sfondo di un bottone, con:
bottone.setBackgroudResurce(R.drawable.nome_immagi ne); funziona. ma è statico, io devo cambiare l'immagine quando premo un altro bottone. ho dunque messo i nomi in un array di stringhe, e provato a fare:
bottone.setBackgroudResurce(R.drawable.nomi[0]); dove nomi è l'arrau e nella posizione 0 c'è il nome "cane", ma niente. ho trovato su internet il seguente metodo:
n = "/drawable/"+nomi[0];
bottone.setBackground(Drawable.createFromPath(n)); ma niente.. altre soluzioni?