2015-08-16 22 views
5

Sto creando pulsanti personalizzati in Android ma voglio evitare la ripetizione.Pulsanti personalizzati Android

Sto provando a creare 2 pulsanti modificabili che condividono lo stesso design ma un'icona di immagine diversa invece del testo.

Attualmente ho questo:

enter image description here

e sto usando questo XML come una risorsa drawable:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <item> 
     <shape> 
      <padding 
       android:bottom="5dp" 
       android:left="5dp" 
       android:right="5dp" 
       android:top="5dp" /> 
      <corners android:radius="20dp"/> 
     </shape> 
    </item> 

    <item> 
     <shape> 
      <padding 
       android:bottom="5dp" 
       android:left="-5dp" 
       android:right="5dp" 
       android:top="-5dp" /> 

      <solid android:color="#edebeb"></solid> 

      <corners android:radius="20dp"/> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <size android:height="150dp" android:width="150dp"></size> 
      <padding 
       android:bottom="5dp" 
       android:left="-5dp" 
       android:right="5dp" 
       android:top="-5dp" /> 

      <solid android:color="#fff"></solid> 

      <corners android:radius="20dp"/> 
     </shape> 
    </item> 

</layer-list> 

Come posso visualizzare un'immagine diversa al centro di ogni pulsante senza duplicare il file xml?

Esiste un modo per passare un valore a ciascun pulsante nel file .java della mia attività in modo da poterlo utilizzare per mostrare un'immagine diversa per ogni pulsante?

risposta

2

Se si utilizza un ImageView quindi è possibile impostare l'icona come src e continuare a utilizzare il drawable come sfondo:

<ImageView ... 
    android:src="@drawable/ic_whatever" 
    android:background="@drawable/background" /> 

Tutte le viste di supporto onClick in modo che possa ancora funzionare come un pulsante. In alternativa è possibile drawable nidificare in modo da poter disporre di quanto segue per ogni pulsante diverso stile:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <item android:drawable="@drawable/ic_whatever" /> 
    <item android:drawable="@drawable/background" /> 
</layer-list> 

La versione Java di quello che ho suggerito sopra (da un Activity):

public void onCreate(...) { 
    ... 
    ((ImageView) findViewById(R.id.my_button)).setImageResource(R.drawable.ic_whatver); 
} 
+0

Grazie :) Ho usato un ImageView al posto di Button come suggerito – Bogdan

-1

ho trovato questo strumento molto utile: http://angrytools.com/android/button/

Se si desidera un bordo l'immagine di sfondo in giro, si può tentare tweaking lo stile con cui, in particolare il tag <stroke/>.

.

È possibile visualizzare immagini diverse purché ciascun pulsante abbia un ID univoco. Nel tuo XML di layout, aggiungi android:background="@drawable/img_file_name_without_xtension" per ciascun pulsante.

Per fare che programmaticamente in Java:

Button myButton = (Button) findViewById(R.id.buttonID); 
myButton.setBackgroundResource(R.drawable.img_file_name_without_xtension); 
0

Vorrei aggiungere altro su thestalker risposta.

Utilizzare la libreria per progettare il pulsante e modificare la sorgente di immagine dal codice.

Esempio

 <mehdi.sakout.fancybuttons.FancyButton 
      android:id="@+id/btn_twitter" 
      android:layout_width="50dp" 
      android:layout_height="30dp" 
      android:layout_below="@+id/imageView2" 
      android:layout_centerHorizontal="true" 
      android:layout_marginLeft="2dp" 
      android:layout_marginRight="2dp" 
      android:padding="7sp" 
      fancy:fb_borderColor="#55acee" 
      fancy:fb_borderWidth="2dp" 
      fancy:fb_defaultColor="#fff" 
      fancy:fb_focusColor="#4d55acee" 
      fancy:fb_iconResource="@drawable/twitter" 
      fancy:fb_radius="200dp" /> 

Modificare la linea

 fancy:fb_iconResource="@drawable/twitter" 

al drawable immagine desiderata.

Problemi correlati