2015-08-16 12 views
5

Ich erstelle benutzerdefinierte Schaltflächen in Android, aber Wiederholung vermeiden wollen.Android benutzerdefinierte Tasten

Ich versuche, 2 toggleable Schaltflächen zu erstellen, die das gleiche Design aber ein anderes Bildsymbol anstelle von Text verwenden.

Zur Zeit habe ich dies:

enter image description here

und ich bin mit dieser XML als ziehbar Ressource:

<?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> 

Wie kann ich ein anderes Bild in der Mitte jeder Taste angezeigt ohne die XML-Datei zu duplizieren?

Gibt es eine Möglichkeit, einen Wert an jede Schaltfläche in der .Java-Datei meiner Aktivität zu übergeben, damit ich es verwenden kann, um ein anderes Bild für jede Schaltfläche anzuzeigen?

Antwort

2

Wenn Sie eine ImageView dann verwenden Sie das Symbol als src einstellen können und immer noch Ihre ziehbar als Hintergrund verwenden:

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

Alle Unterstützung Ansichten onClick, so kann es immer noch als eine Schaltfläche fungieren. Alternativ können Sie nisten Drawables so können Sie das folgende für jede unterschiedliche Schaltfläche Stil:

<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> 

Die Java-Version von dem, was ich oben vorgeschlagen (von einem Activity):

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

Danke :) Ich habe ein ImageView anstelle von Button verwendet, wie Sie vorgeschlagen – Bogdan

-1

fand ich dieses Tool sehr nützlich: http://angrytools.com/android/button/

Wenn Sie eine Umrandung um das Hintergrundbild möchten, können Sie versuchen, den Stil mit dem Zwicken, insbesondere die <stroke/>-Tag.

.

Sie können verschiedene Bilder anzeigen, solange jede Taste eine eindeutige ID hat. Fügen Sie in Ihrem Layout-XML für jede Schaltfläche android:background="@drawable/img_file_name_without_xtension" hinzu.

Um das programmatisch in Java zu tun:

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

Ich möchte hinzufügen mehr auf thestalker 's Antwort.

Verwenden Sie die Bibliothek, um die Schaltfläche zu entwerfen und die Bildquelle aus dem Code zu ändern.

Beispiel

 <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" /> 

die Zeile ändern

 fancy:fb_iconResource="@drawable/twitter" 

zu Ihrem gewünschten Bild ziehbar.