2015-08-16 148 views
5

我在android中創建自定義按鈕,但要避免重複。Android自定義按鈕

我正在嘗試創建2個可切換的按鈕,它們共享相同的設計,但使用不同的圖像圖標而不是文本。

目前我有這樣的:

enter image description here

而且我使用此XML作爲繪製資源:

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

我怎麼能在每個按鈕的中心顯示不同的圖像沒有重複的XML文件?

是否有任何方法可以將值傳遞給我活動的.java文件中的每個按鈕,以便我可以使用它爲每個按鈕顯示不同的圖像?如果你想在你的背景圖像的邊框,您可以嘗試調整與風格,特別是<stroke/>標籤 http://angrytools.com/android/button/

回答

2

如果使用ImageView那麼你可以設置圖標爲src,仍然使用你繪製的背景:

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

所有視圖支持onClick,所以它仍然可以作爲一個按鈕。另外,您可以窩繪項目,所以你可以爲每個不同的按鈕樣式如下:

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

的就是我上面建議(從Activity)的Java版本:

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

謝謝:)我使用了ImageView而不是按照你的建議 – Bogdan

-1

,我發現這個工具非常有用。

只要每個按鈕都有唯一的ID,就可以顯示不同的圖像。在您的佈局XML中,爲每個按鈕添加android:background="@drawable/img_file_name_without_xtension"

要做到這一點編程在Java中:

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

我想補充更多關於thestalker的回答。

使用庫來設計按鈕並從代碼更改圖像源。

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

改變線

 fancy:fb_iconResource="@drawable/twitter" 

到所需的圖像繪製。