Android 个自定义按钮

Android custom buttons

我正在 android 中创建自定义按钮,但希望避免重复。

我正在尝试创建 2 个可切换按钮,它们共享相同的设计,但使用不同的图像图标而不是文本。

目前我有这个:

我正在使用这个 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 文件的情况下在每个按钮的中心显示不同的图像?

有什么方法可以将值传递给 activity 的 .java 文件中的每个按钮,以便我可以使用它为每个按钮显示不同的图像?

我发现这个工具非常有用: http://angrytools.com/android/button/

如果您想要背景图片周围有边框,您可以尝试调整样式,尤其是 <stroke/> 标签。

.

只要每个按钮都有唯一的 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); 

如果您使用 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>

我上面建议的 java 版本(来自 Activity):

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

我想对 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"

到您想要的可绘制图像。