2015-08-16 152 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" 

到所需的图像绘制。