2015-08-16 26 views
5

Tworzę niestandardowe przyciski w Androidzie, ale chcę uniknąć powtórzeń.Przyciski niestandardowe Androida

Próbuję utworzyć 2 przyciski do przełączania, które mają ten sam wzór, ale inną ikonę zamiast tekstu.

Obecnie mam to:

enter image description here

i używam tego XML jako rozciągliwej zasobu:

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

Jak mogę wyświetlić inny obraz w centrum każdego przycisku bez duplikowania pliku xml?

Czy mogę przekazać wartość do każdego przycisku w pliku .java mojej aktywności, aby móc go użyć do wyświetlenia innego obrazu dla każdego przycisku?

Odpowiedz

2

Jeśli używasz ImageView następnie można ustawić ikonę jako src i nadal korzystać z rozciągliwej jako tło:

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

wszystkich widokach wsparcia onKliknij, aby nadal mógł działać jako przycisk. Alternatywnie można kanału alfa gniazdo, dzięki czemu można mieć następujące informacje dotyczące każdego innego przycisku styl:

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

wersja Java, co ja zaproponowałem powyżej (z Activity):

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

Dzięki :) Użyłem ImageView zamiast przycisku, jak zasugerowałeś – Bogdan

-1

znalazłem to narzędzie bardzo przydatne: http://angrytools.com/android/button/

Jeśli chcesz obramowanie wokół obrazu tła, można spróbować szczypanie styl z tym, szczególnie tag <stroke/>.

.

Możesz wyświetlać różne obrazy, o ile każdy z nich ma unikalny identyfikator. W swoim XML układu, dodaj android:background="@drawable/img_file_name_without_xtension" dla każdego przycisku.

Aby to zrobić programowo w Javie:

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

Chciałbym dodać więcej na odpowiedź thestalker.

Użyj biblioteki do zaprojektowania przycisku i zmień Źródło obrazu z kodu.

Przykład

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

zmienić linię

 fancy:fb_iconResource="@drawable/twitter" 

do żądanej rozciągliwej obrazu.